https://www.acmicpc.net/problem/1598
#include <stdio.h>
#include <math.h>
int main(void) {
int a = 0;
int b = 0;
int temp = 0;
int i = 0;
int j = 0;
int a_ewdist = 0;
int a_nsdist = 0;
int b_ewdist = 0;
int b_nsdist = 0;
int ewdist = 0;
int nsdist = 0;
scanf("%d %d", &a, &b);
if (a > b) {
temp = a;
a = b;
b = temp;
}
if (a % 4 == 0) a_nsdist = 3;
else a_nsdist = a % 4 - 1;
if (b % 4 == 0) b_nsdist = 3;
else b_nsdist = b % 4 - 1;
nsdist = abs(a_nsdist - b_nsdist);
for (i = 1; i <= 4; i++) {
for (j = 0; j <= 10000000 / 4; j++) {
if (i + j * 4 == a) {
a_ewdist = j;
break;
}
}
for (j = 0; j <= 10000000 / 4; j++) {
if (i + j * 4 == b) {
b_ewdist = j;
break;
}
}
}
ewdist = abs(a_ewdist - b_ewdist);
printf("%d", nsdist + ewdist);
return 0;
}
이 문제는 1행이 (4의 배수 +1), 2행이 (4의 배수 +2), 3행이 (4의 배수 +3), 4행이 4의 배수인 열이 무한한 어떤 표에서 두 숫자를 입력받았을 때 두 수 사이의 직각거리를 구하는 문제이다.
두 수를 입력받고 연산이 꼬이는 것을 방지하기 위해 a와 b중 큰 숫자를 a로 두고 진행하였다. 나는 직각거리를 구하기 위해서 남북거리와 동서거리를 더하는 방법을 사용했는데, 남북거리를 구하기 위해 두 수가 표의 1행에서 얼마나 떨어져있는지 각각 구한 후 그 값의 차에 절댓값을 적용하여 거리를 구했다. 동서거리를 구하기 위해서도 남북거리와 비슷하게 두 수가 표의 1열에서 얼마나 떨어져있는지 각각 구한 후 그 값의 차에 절댓값을 적용하여 거리를 구했다. 이제 동서거리와 남북거리를 더한 것이 직각거리이므로 출력한다.