티스토리 뷰

📌문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

 

📌풀이

첫번째 레이어: 1

두번째 레이어: 2~7(6칸)

세번째 레이어: 8~19(12칸)

네번째 레이어: 20~37(18칸) ...

레이어가 증가할수록 각 레이어의 최댓값이 1+6*n 형태로 증가

 

입력받은 수가 현재 레이어의 최댓값 보다 크다면 nums에 6*cnt만큼 증가시키고 레이어도 한칸 증가

만약 입력받은 수가 현재 레이어의 최댓값보다 작다면 해당 레이어에 존재하는 것이므로 반복문 종료

 

📌코드

n = int(input())
nums, cnt = 1, 1
while n > nums:
    nums += 6 * cnt
    cnt += 1

print(cnt)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함