[Baekjoon] - 2292. 벌집

baekjoon - 문제 링크

N = int(input()) - 1
# 지나가는 벌집 방의 갯수
result = 1

for i in range(1, N+1):
    N = N - ((i * 6))
    result += 1
    if N == 0:
        result -= 1
    elif N < 0:
        break
print(result)

🔑 코드 구현보다 규칙찾는게 더 어려웠다.🤢🤢🤢
규칙을 찾아보면 첫번째 벌집은 1개이고 값은 1, 두번째에는 6개 벌집이 생성되고 2~7까지의 값을 갖고, 세번째에는 12개의 벌집이 생성되고 8~19까지의 값을 갖는다. 네번째에는 18개의 벌집이 생성되고 20~37, 다섯번째에는 24개의 벌집이 생성되고 38~61까지의 값을 갖는다.
위와 같은 규칙을 갖고있음!!

  • 인풋으로 받은 N값에서 벌집의 갯수만큼 뺀다. 따라서 공통적으로 첫번째 벌집은 항상 빠지기 때문에 N -1을 해줬다.
  • 초기 result값을 1로 준 이유는 1번째 벌집부터 시작해도 항상 1개의 벌집 방은 지나기 때문이다.
  • for문으로 돌면서 6, 12, 18, 24 ...를 빼준다. 빼줄때마다 result에 1씩 추가하고 빼고 난 뒤의 N값이 0이 되었다는것은 벌집리스트의 마지막 값이 되었다는 뜻이므로 result에서 1을 빼준다.
  • 그리고 빼고 난 뒤 값이 음수가 되었다는 것은 다음 벌집리스트에 들어오지 못했기 때문이므로 break를 하여 for문을 빠져나오고 result를 프린트한다!

💡+ 구글링하다가 본 좋은코드

N = int(input())
cnt = 1
while N > 1:
    N -= (6 * cnt)
    cnt += 1
print(cnt)

변수를 일일이 지정해주지 않아 코드가 많이 간결해짐! 나도 언젠간 이런코드를..!!😭

좋은 웹페이지 즐겨찾기