출처 :
https://www.acmicpc.net/problem/2292
풀이:
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 |