2292번 : 벌집 문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다.
그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.
숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.
예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
풀이 코드
n = int(input())
count = 1
# 1단계인 경우
if n == 1:
print(1)
# 1단계 이상인 경우
else:
n -= 1
while n>0:
n -= 6 * count
count += 1
print(count)
+ 문제 풀이 포인트)
1을 중심으로 6의 배수마다 한 겹씩 벌집이 늘어남
▶ 최소 이동 거리를 구하기 위해서는 6의 배수를 이용
n = int(input())
- 첫째 줄에서 자연수 n을 입력받음
- input() 은 한 줄의 문자열만 입력받을 수 있음
- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용
count = 1
- 벌집 중앙 1에서 n번 방까지 최소 몇 개의 방을 지나야 하는지를 세는 변수 count
- 1번방에서 시작하므로, 무조건 하나의 방은 지나야 함
따라서 1로 초기화
if n == 1: print(1)
- n이 1인 경우, 1번 방에서 1번 방까지 하나의 방만 지나면 됨
- 따라서 최소 방의 개수로 1 출력
else: n -= 1
- n이 1 이상인 경우, n번 방까지 가는 최소 방의 개수를 세어야 함
- n 에서 1단계까지 가는 과정을 순차적으로 빼줌
- 먼저, 1단계에 해당하는 1을 빼기
while n > 0:
- n이 0과 같거나 작아지기 전까지 while 문 반복 수행
( n이 1일 때까지)
n -= 6 * count
- 1을 중심으로 6의 배수마다 한 겹씩 벌집이 늘어남
- n에서 6씩 누적하여 빼주면 최소 거리를 구할 수 있음
count += 1
- 6의 배수마다 벌집이 한겹씩 늘어나므로, count 값을 1 증가
print(count)
- 벌집 중앙 1번 부터 n번 방까지 가는 최소 개수의 방 count 출력
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 2869번 달팽이는 올라가고 싶다 (기본수학1) (0) | 2023.02.23 |
---|---|
[백준/Python] 1193번 분수찾기 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1712번 손익분기점 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1316번 그룹 단어 체커 (문자열) (0) | 2023.02.23 |
[백준/Python] 2941번 크로아티아 알파벳 (문자열) (0) | 2023.02.23 |