Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 2292번 - 벌집 (PYTHON 풀이) 본문
문제:

문제는 다음과 같다. 사용자로부터 입력값을 받은 다음 1부터 시작해서 해당 숫자까지 가기 위해서 방을 몇번이나 거쳐야하느냐에 대한 문제이다.

예를 들어서 사용자로부터 13을 입력받았다면 최소의 방을 거쳐야하므로 상기 이미지와 같이 1부터 시작해서 13번까지 이동해야할 것이다.
그렇다면 출력은 3이 되어야한다. (1,4,13: 총 3개)
풀이
a=int(input())
if a == 1:
print(1)
else:
s=2
d=6
g=1
while True:
e = s + d - 1
if s <= a <= e:
print(g+1)
break
s = e + 1
g += 1
d = 6 * g
코드는 다음과 같다. 코드를 작성하기 위해서 규칙을 찾아야하는데 1을 기준으로 처음에 6개의 방이 붙고, 그 다음은 12개의 방, 그 다음은 18개의 방이 붙는다. 이를 통해 6의 배수만큼 방이 늘어난다는 것을 파악할 수 있다.

위 설명을 그림으로 나타낸 이미지이다. 1을 기준으로 노란색점(2~7), 그 다음엔 갈색점 (8~19), 그 다음엔 보라색점(20~37)...
이러한 순서로 6의 배수만큼 방이 늘어나고 있다! 이를 활용하여 코드를 작성하면 된다.
1을 입력받을 때만 1이 출력되어야하니 if문을 통해 조건을 걸고 1이 아니라면 초기 범위 값, 출력한 단계, 최종 범위 값을 초기화해준 뒤에,
반복문을 걸어서 위에 설명한대로 2~7, 8~19 범위가 걸릴 수 있게 코드를 적어준다.
a=int(input())
s=2
d=6
g=1
if a == 1:
print(1)
while True:
e = s + d - 1
if s <= a <= e:
print(g+1)
break
s = e + 1
g += 1
d = 6 * g
처음에 이런식으로 코드를 작성했다가 출력 초과가 발생해서 고민하다가 a가 1일 때 break가 따로 없어서 while로 자동으로 진입하다보니 무한대로 반복문안에 갇혀있게 된다. 이 점을 유의하면 문제를 풀 수 있다.
'CODING 💻' 카테고리의 다른 글
| 백준 27433번 - 팩토리얼 2 (PYTHON 풀이) (0) | 2025.09.16 |
|---|---|
| 백준 1193번 - 분수찾기 (PYTHON 풀이) (0) | 2025.09.15 |
| 백준 9063번 - 대지 (PYTHON 풀이) (0) | 2025.09.13 |
| 백준 14215번 - 세 막대 (PYTHON 풀이) (0) | 2025.09.12 |
| 백준 5073번 - 삼각형과 세 변 (PYTHON 풀이) (0) | 2025.09.11 |
