[Baekjoon] - 2292. 벌집
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)
변수를 일일이 지정해주지 않아 코드가 많이 간결해짐! 나도 언젠간 이런코드를..!!😭
Author And Source
이 문제에 관하여([Baekjoon] - 2292. 벌집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjiani/Baekjoon-2229.-벌집저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)