Lim Seunghyun Space

[백준 온라인 저지] 벌집 본문

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