반응형
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWyNQrCahHcDFAVP
풀이
방향을 상하 & 좌우 번갈아 가면서 해야하는 문제.
보는 순간 패턴이 있을것으로 보여 패턴을 찾아 손 쉽게 풀 수 있었던 문제.
예로 0,0 에서 1,1로 이동할 경우
오른쪽 한번 위로 한번으로 이동 가능.(대각선 이동으로 생각하면 편하다.)
풀이 과정은 2가지로 나누어진다.
- row의 차이와 col의 차이 중 더 작은것*2 만큼 이동( 즉, 대각선으로 이동가능한 모든 경우를 이동)
- 위의 차이중 (큰 값 - 작은 값)만큼의 이동을 해야 한다. ( 대각선 이동을 한 후, 남은 직선 이동)
2번의 경우 row 차이와 col차이의 차이는 아래와 같이 나누어진다.
- 짝수인 경우 : 2 * 차이의 차이
- 홀수인 경우 : 2* 차이의 차이 -1
위의 패턴을 파악하는 것이 핵심.
1,2 번의 과정을 더하면 결과값.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int x1, x2, y1, y2;
static int[] dy = { -1, 1, 0, 0 }; // 상하좌우
static int[] dx = { 0, 0, -1, 1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
for (int test = 1; test <= tc; test++) {
StringTokenizer st = new StringTokenizer(br.readLine());
x1 = Integer.parseInt(st.nextToken());
y1 = Integer.parseInt(st.nextToken());
x2 = Integer.parseInt(st.nextToken());
y2 = Integer.parseInt(st.nextToken());
// ================================ 입력 ================================
int differ = big - small;
int result = 0;
result = 2 * small + 2 * differ - (differ % 2);
System.out.println("#" + test + " " + result);
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
[SWEA_7701 - JAVA] 염라대왕의 이름 정렬 (1) | 2020.03.12 |
---|---|
[SWEA_1907 - JAVA] 모래성 쌓기 (0) | 2020.03.03 |
[SWEA_1247 - JAVA] 최적 경로 (0) | 2020.03.01 |
[BAEKJOON_11403 - JAVA] 경로 찾기 (0) | 2020.02.23 |
[BAEKJOON_2178 - JAVA] 미로 탐색 (0) | 2020.02.23 |