[Baekjoon] 2292 - 벌집 (Python)
문제
백준에 있는 일반 수학 문제이다. 일반 수학1 분류에 있는 문제들은 수학 규칙을 찾아 코드로 작성하면 된다. 처음에는 배열생성해서 어찌 해야되나 생각했지만 아니다. 이것은 무한 벌집이다..
Input
1부터 몇 개의 방을 지나가는지 궁금한 벌집의 N번 방
Output
입력으로 주어진 N번 방이 최소 개수의 방을 지나서 갈 때 몇개의 방을 지나는가?
다음 풀이를 보자.
풀이
벌집을 잘 보면 1이 중앙에 있고 2 ~ 7, 8 ~ 19, 20 ~ 37 … 이런 식으로 숫자들이 시계방향으로 가면서 증가하는 규칙을 찾을 수 있다.
n = 1 일 때는 방 1개를, n = 2 ~ 7 일 때는 방 2개를, n = 8 ~ 19 일 때는 방 3개를~… 이런 식이다.
지나는 방의 개수가 늘어날 수록 벌집 개수도 동시에 6의 배수 만큼 늘어나는 것이다.
N이 같은 line에 속해있는 수 들은 모두 최소 루트 방 수(지나는 방 갯수) 가 같다.
N | 벌집 갯수 | 지나는 방 갯수(cnt) |
---|---|---|
1 | 1 | 1 |
2 ~ 7 | 6 | 2 |
8 ~ 19 | 12 | 3 |
20 ~ 37 | 18 | 4 |
38 ~ 61 | 24 | 5 |
62 ~ 91 | 30 | 6 |
… | … | … |
Code
1
2
3
4
5
6
7
8
9
10
11
12
import sys
n = int(sys.stdin.readline())
cnt = 1 # 지나온 방 갯수
room = 1 # 벌집 갯수
while n > room:
room += 6 * cnt # 벌집이 6의 배수씩 증가
cnt += 1
print(cnt)
while문은 벌집 갯수room
가 n
보다 작아질 때 까지,
room
은 벌집 갯수를 나타내는 변수로, 중앙 1부터 시작해서 while문이 반복되는 동안 6의 배수씩 증가한다.
cnt
는 지나온 방 갯수로 입력값인 n
번 방이 벌집의 몇 번째 겹에 있나를 나타낸다.
Leave a comment