백준 1598번: 꼬리를 무는 숫자를 좌표로 바꾸기
백준 1598번 꼬리를 무는 숫자 나열은 세로로 네 개씩 놓인 숫자 사이의 직각 거리를 구하는 문제입니다. 숫자를 좌표로 바꾸어 가로 거리와 세로 거리를 더했습니다.
처음에는 4로 나눈 몫을 가로 좌표, 나머지를 세로 좌표로 잡았습니다. 그런데 9 % 4 = 1, 10 % 4 = 2, 11 % 4 = 3인데 12 % 4 = 0이 됩니다. 그 바람에 같은 열의 마지막 숫자가 맨 위 좌표로 돌아갔습니다.
그래서 입력값에서 1씩 빼면 숫자 1의 좌표가 (0, 0)에서 시작합니다. 이제 9부터 12까지는 몫이 같고 나머지는 0부터 3까지 차례로 나옵니다. 두 입력값의 몫 차이와 나머지 차이에 각각 절댓값을 취해 더했습니다.
풀이 코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
int h = Math.abs(x / 4 - y / 4);
int v = Math.abs(x % 4 - y % 4);
bw.write(String.valueOf(h + v));
bw.flush();
}
}