newbie22 2021. 6. 29. 15:59

문제 주소 : https://www.acmicpc.net/problem/2292

정답 비율 : 45.510% (2021.06.29 15:20 기준)

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

 

문제 풀이 : 

각 원을 기준으로 가장 큰 수를 표로 정리하면 다음과 같습니다.

C1 C2 C3 C4 C5 ...
1 7 19 37 61 ...

 

이를 자세히 보면 규칙이 있습니다.

C1 : 1 + 6 * 0

C2 : C1 + 6 * 1

C3 : C2 + 6 * 2

C4 : C3 + 6 * 3

 

이를 정리하면 벌집 중앙 1번 방에서 x번 거쳐 지나서 갈 수 있는 최대의 방 번호는 Cx = Cx-1 + 6 * (x - 1)이 됩니다.

 

따라서 N번째 방이 주어질 때 해당 방까지 지나가는 방의 개수는 각 1 ~ n번 거쳐 지나서 갈 수 있는 최대의 방 번호와 비교하면 구할 수 있습니다.

 

코드는 다음과 같습니다.

#include<stdio.h>

int main(void){	
	int num = -1, max_room = 1;

	scanf("%d", &num);

	for (int i = 0; ; i++) {
		max_room += i * 6;
		if (num <= max_room) {
			printf("%d", i + 1);
			break;
		}
	}
	return 0;
}