출처 :
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
'코딩테스트 > 기초' 카테고리의 다른 글
백준 2869 달팽이는 올라가고 싶다. - python (0) | 2022.01.06 |
---|---|
백준 1193 분수찾기 - python (0) | 2022.01.06 |
백준 1712 손익분기점 - python (0) | 2022.01.06 |
백준 2941 크로아티아 알파벳 - python (0) | 2022.01.03 |
백준 5622 다이얼 - python (0) | 2022.01.03 |