Algorithm/문제
[백준 온라인 저지] 벌집
Lim Seung Hyun
2022. 11. 13. 23:56
문제 출처
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
문제 해설
- 각 방을 숫자로 주소를 매긴 육각형 형태의 벌집이 있다.
- 각 방의 1부터 시작해 시계 방향으로 하나씩 증가하여 주소를 매겼다.
- 1번 방부터 입력한 N번 방까지 최소 몇 개의 방을 지나치는지 계산하는 문제이다.
- 1번 방 주위로 2번 방부터 7번 방까지 6개로 둘러싸여 있다.
- 8번 방부터 19번 방까지 12개로 둘러싸여 있다.
- 20번 방부터 37번 방까지 18개로 둘러싸여 있다.
- 위의 규칙을 이용하여 정리하면
- 2번 방부터 7번 방까지 중심인 1번 방으로부터의 거리를 1이라고 하자.
- 8번 방부터 19번 방까지는 거리가 2이다.
- 거리 1은 6개
- 거리 2는 12개
- 거리 3은 18개
- 거리 n은 6 * n개가 될 것이다.
- 거리가 중요한 이유는 각 방은 붙어있기 때문에 최소 지나가는 방의 개수가 깊이가 되기 때문이다.
- 예를 들어, 입력한 값이 64면 1 > 2 > 9 > 22 > 40 > 64로 6개 방을 지나치는 것이 최소한으로 이동한 것이 될 것이며 64번 방은 1번 방부터 거리가 6이다.
나의 풀이
# source: https://www.acmicpc.net/problem/2292
import sys
n = int(input())
pass_cnt = 1
start_num = 1
end_num = 1
while True:
num_range = range(start_num, end_num + 1)
if n in num_range:
break
else:
start_num = start_num + 1
end_num = end_num + (pass_cnt * 6)
pass_cnt += 1
print(pass_cnt)
- 위에서 이용한 거리라는 개념을 이용하여 거리를 하나씩 증가시켜 속한 방 번호의 범위를 계산하여 문제를 해결하였다.
Git 주소
728x90