1598. 꼬리를 무는 숫자 나열

박진우·2023년 4월 9일
0

문제 링크:

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열에서 얼마나 떨어져있는지 각각 구한 후 그 값의 차에 절댓값을 적용하여 거리를 구했다. 이제 동서거리와 남북거리를 더한 것이 직각거리이므로 출력한다.

profile
SRIHS Infosec

0개의 댓글