본문 바로가기
작업/Problem Solving

백준 2292(벌집) 파이썬(python) 해결

728x90

문제

 

 

위의 그림과 같이 육각형으로 이루어진 벌집이 있다.

 

 

그림에서 보는 바와 같이 중앙의 방 1부터 시작해서
이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.


숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때
몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.


예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

 

 

출력

 

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

 


코드

 

num = int(input())
start = 1
last = 0 


while(True):
    if num > start:
        last += 1
        start = start + last*6
    else:
        print(last+1)
        break

 

벌집의 칸의 수가 증가하기 위해 얼마큼의 수가 필요한지 알아내면 간단합니다.
먼저 가운데 1로 시작합니다 (start = 1)
입력된 값(num)이 13이라고 한다면 start(1)보다 큽니다.
그래서 벌집을 한 칸 늘립니다. (last = 1)


벌집을 한 칸 늘리면 6의 배수만큼 증가하는 규칙이 있습니다.
그래서 벌집을 구성하는 육각형의 개수는 1 + 6 = 7이 됩니다.


아직 num(13) > start(7)이기 때문에 벌집을 한 칸 더 늘려야 합니다.
벌집을 한 칸 더 늘리면(last = 2) 육각형의 개수는 7 + last(2) x 6 = 19가 됩니다.


그러면 num < start가 성립하여 벌집을 더 키울 필요가 없으며
13이 위치한 곳까지 가려면 최소 3칸 (last + 1)을 이동해야 하는 것을 알 수 있습니다.

 

 

-끝-

 

 

 

728x90