반응형
벌집의 중앙부터 각 방에 번호를 매긴 후 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);
}
다소 심플한 코드가 완성된다.
반응형
'C > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #4948 베르트랑 공준 (0) | 2021.03.05 |
---|---|
[C] 백준알고리즘 #1193 분수찾기 (0) | 2021.02.09 |
[C] 백준알고리즘 #1712 손익분기점 (0) | 2021.02.03 |
[C] 백준알고리즘 #1065 한수 (0) | 2021.01.28 |
[C] 백준알고리즘 #15596 정수 N개의 합 (0) | 2021.01.28 |