STUDY_SEONMIN
2292. 벌집 본문
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
N = int(input())
n = 1
while N > (3*n**2-3*n+1):
n += 1
print(n)
- 중앙의 방부터 시작해서 n개의 방을 지나서 도착할 수 있는 방 중 가장 큰 방의 값은 $3n^2 - 3n + 1$입니다.
- 따라서 임의의 방 번호 N이 주어졌을 때 몇 개의 방을 지나야 하는 가는
$3(n-1)^2 -3(n-1) + 1 \lt N \le 3n^2 - 3n + 1$ 을 만족하는 n을 구하는 것으로 답을 알 수 있습니다. - while문의 실행 조건이 더 이상 만족하지 않는 다는 것은 위의 수식과 같은 의미가 되므로 이렇게 코드로 구현하였습니다.
'STUDY > Baekjoon Algorithm' 카테고리의 다른 글
2869. 달팽이는 올라가고 싶다 (0) | 2021.07.07 |
---|---|
1193. 분수찾기 (0) | 2021.07.07 |
1712. 손익분기점 (0) | 2021.07.07 |
1316. 그룹 단어 체커 (0) | 2021.07.06 |
2941. 크로아티아 알파벳 (0) | 2021.07.06 |
Comments