티스토리 뷰
📌문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 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)
'코딩테스트' 카테고리의 다른 글
[백준/파이썬] 2501 약수 구하기 (0) | 2025.01.15 |
---|---|
[백준/파이썬] 5086 배수와 약수 (0) | 2025.01.14 |
백준 2903 중앙 이동 알고리즘/파이썬 (0) | 2025.01.10 |
백준 2745 진법 변환/파이썬 (0) | 2025.01.09 |
백준 2563 색종이/파이썬 (0) | 2025.01.08 |