728x90

백준 2292 벌집

접근 방법

벌집

 처음엔 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를 더 잘 생각해야되는 것 같다.

항상 꼼꼼히 읽어보고, 내가 코딩한 구문을 검증해보며 실수하지 말고 잘 해보자!!

728x90