출처 : https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
육각형으로 이루어진 벌집에 중심부터 회전하며 번호로 주소를 매긴 후
벌집의 중앙인 1번부터 N번에 도달할 때까지 거치는 최소 방의 개수를 구하는 문제이다.
(1번, N번을 포함한다.)
벌집 이미지는 다음과 같다.
더보기
![](https://blog.kakaocdn.net/dn/rxT5P/btrlDA9lpK1/n0RWUbMqpyccwwsJLIpBf0/img.png)
중심을 기준으로 한 바퀴씩 나눈다면 각 그룹 안의 방에 대해 최소 도착 거리가 같다.
![](https://blog.kakaocdn.net/dn/rxT5P/btrlDA9lpK1/n0RWUbMqpyccwwsJLIpBf0/img.png)
방 그룹 | 1번 방 | 빨간 방 | 초록 방 | 파란 방 |
최소 방 개수 | 1개 | 2개 | 3개 | 4개 |
그룹 내 범위 | 1 | 2~7 | 8~19 | 20~37 |
그룹 내 방 개수 | 1개 | 6개 | 12개 | 18개 |
자세히 보면 그룹 내 방 개수가 1부터 6의 배수로 이루어져있다.
1이 하나의 그룹을 6이, 12가, ... , 6k가 하나의 그룹을 이루고, 각 그룹에 속한 방들은 최소 방의 개수가 같으므로
n에서 1부터 6의 배수씩 빼주면서 n이 들어가 있는 6의 배수 그룹을 구하면 최소 방의 개수가 나온다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
n = int(input())
i = 1
a = 1
while True:
n = n - i
if n == 0 or n < 0 :
break
i = 6 * a
a = a + 1
print(a)
|
cs |
'알고리즘 > Python' 카테고리의 다른 글
[python] 프로그래머스 - 전화번호 목록 (0) | 2022.02.05 |
---|---|
[python] 프로그래머스 - 나머지가 1이 되는 수 찾기 (0) | 2022.01.20 |
[python] 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2022.01.07 |
[python] 백준 2789 - 블랙잭 (0) | 2022.01.07 |
[python] 백준 2447 - 별 찍기 - 10 (0) | 2021.11.23 |