C/백준알고리즘

[C] 백준알고리즘 #2292 벌집

Sehyeok20 2021. 2. 3. 20:55
반응형

백준알고리즘 #2292 벌집 문제

벌집의 중앙부터 각 방에 번호를 매긴 후 N번방 까지의 거리를 구하는 문제이다.

먼저 이 벌집의 규칙성부터 알아보자

가장 가운데에 1이 있고 각 방의 모양은 육각형이므로 1번방을 둘러싼 주위에는 6개의 방이 있다.

이 6개의 방에 2 ~ 7 까지의 번호를 매긴다.

다시 2 ~ 7 까지를 둘러싸는 방의 개수를 구한다. 이는 12개이다. 

이 12개의 방에 8 ~ 19까지의 번호를 매긴다.

....

반복하게 되면 가장 안쪽의 1번방을 점이라 생각하고 각 방으로부터 점 까지의 거리 (자기자신도 포함) 는

2 ~ 7번방은 2

8 ~ 19번방은 3

20 ~ 38번방은 4

...

6의 배수로 늘어남을 확인할 수 있다.

 

따라서 n번째 방의 거리는 n이 1보다 같거나 작아질 때까지 6, 12, 18... 6n까지 차례대로 빼주고, 

이때 1보다 작아지는 n의 값이 1번방부터의 거리가 된다.

 

이를 코드로 작성해보면

#include <stdio.h>
int main() {
	int n;
	int count = 1;
	scanf_s("%d", &n);
	while(n > 1){
		n -= 6 * count;
		count++;
	}
	printf("%d", count);
}

다소 심플한 코드가 완성된다.

 

반응형