코딩테스트/기초

백준 2292 벌집 - python

math_tbro 2022. 1. 6. 21:41

출처 :

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

풀이:

 

a = int(input())
cnt = 0
while True:
    if  a <= 1 + cnt * (cnt +1) *3 :
        break
    cnt += 1 
print(cnt+1)

 

1. 출력을 받아와준다.

 

2. 그리고 이제 뜯어보면 1부터 점점 원 비슷하게 퍼져나감을 알수 있다.

 

1

234567

8910111213141516171819

20~37

이런식으로 뻗어나가는데

규칙을 살펴보니 

끝자리를 보면

1 7 19 37 61 로 이것의 차이를 살피면

6 12 18 24 로 6의 배수이다!

따라서 37 = 1+ 6*1 + 6 *2 + 6*3 인것이다. 이걸 수식으로 정리하면

1 + 3n(n+1) 이 되는데. 만일 이 수 보다 작거나 같으면 여기서 n+1 이 방의 개수이다

 

3. 따라서 while True 로 항상 반복을 지정해주고

그 다음 if 문을 써서 적절한 n 값을 찾으면 멈춰준다! 그리고 print