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
'작업 > Problem Solving' 카테고리의 다른 글
백준 2775(부녀회장이 될테야) 파이썬(python) 해결 (0) | 2020.09.10 |
---|---|
백준 2869(달팽이는 올라가고 싶다) 파이썬(python) 해결 (2) | 2020.08.20 |
백준 1193(분수찾기) 파이썬(python) 해결 (0) | 2020.08.20 |
백준 2839(설탕 배달) 파이썬(python) 해결 (0) | 2020.08.18 |
백준 1712(손익분기점) 파이썬(python) 해결 (0) | 2020.08.18 |