접근 방법
벌집
처음엔 1을 둘러싸고 있는 2~7까지의 숫자,
1-> 2 -> 9 -> 22 1,7,13,19와 같이 등차가 6인 등차수열
3 -> 11 -> 25 2, 8, 14와 같이 등차가 6인 등차수열
4 -> 13 -> 28 3, 9, 15와 같이 31 33 3*5와 같이 홀수 번호를 3에 곱한수
5 -> 15 > 31 4, 10, 16 같이 등차가 6인 등차 수열
6 -> 17 -> 34 5, 12, 17 과같이 등차가 5인 등차수열
7 -> 19 -> 37 6, 12, 18과 같이 등차가 6인 등차수열
이렇게 생각했지만 8, 20, 21과 같이 포함되지 못하는 숫자가 발생한다는 것을 알게 되었다.
그림을 자세히 보며 각 층의 숫자들을 써보았고 [1], [2 3 4 5 6 7] [8 9 10 11 12 13 14 15 16 17 18 19] 즉, 길이가 1, 6, 12, 18과 같이 벌집이 하나 생길 때마다 6의 배수의 길이만큼 더해진다라는 것을 발견하였다.
그렇다면 6에 곱하는 숫자를 1씩 더해주며 입력숫자와 비교해주면 끝 !
오류코드
n = int(input())
room = 1 # 벌집의 개수, 1개부터 시작
cnt = 1
while n > room :
room = 6 * cnt # 벌집이 6의 배수로 증가
cnt += 1 # 반복문을 반복하는 횟수
print(cnt)
왜 시간초과가 계속 뜨는지 알지 못하였다.. 그리고 답도 틀리게 되었다.
주석으로 반복문을 돌리는 flow를 그려보며 답을 찾을 수 있었다.
처음엔 1로 잘 시작하였지만 room = 6 *cnt로 변수의 값을 6의 배수로 바꿔줘버렸다.
정답 코드
```python
n = int(input())
room = 1 # 벌집의 개수, 1개부터 시작
cnt = 1
while n > room :
room += 6 * cnt # 벌집이 6의 배수로 증가
cnt += 1 # 반복문을 반복하는 횟수
print(cnt)
```
위와 같이 단순히 +하나를 붙여줬을 뿐인데 잘 돌아갈 수 있었다.
사실 풀어써보면
room = 6*cnt
room = room + 6*cnt
가 되어 전혀 다른 구문인 것을 알 수 있다!
확실히 수학적 요소가 들어가면서 알고리즘의 flow를 더 잘 생각해야되는 것 같다.
항상 꼼꼼히 읽어보고, 내가 코딩한 구문을 검증해보며 실수하지 말고 잘 해보자!!
'ALGORITHM > 수학, 기하학' 카테고리의 다른 글
[백준 20206] 파이썬 - 푸앙이가 길을 건너간 이유 (0) | 2022.10.02 |
---|---|
[백준 1676번] 파이썬 - 팩토리얼 0의 개수 (1) | 2022.09.28 |
[백준 2108] 파이썬 - 통계학 (1) | 2022.09.16 |
[SWEA 1486] 파이썬 - 장훈이의 높은 선반 (1) | 2022.09.16 |
[백준 11729번] 파이썬 - 하노이 탑 이동순서 (0) | 2022.09.06 |