백준 2292 (벌집) - Python

김종언·2024년 1월 14일
0

백준

목록 보기
10/18

문제.

상당해보인다. 한 겹 올라갈 때마다의 규칙을 찾는게 중요해보인다.

풀이.

N = int(input())
i = 0
init = 2

while True:
    current_range = list(range(init, init + 6 * (i+1)))
    if N not in current_range:
        i += 1
        init += 6 * i
    else:
        print(i+2)

처음 쓴 코드다. 범위가 6n씩 증가하는 규칙을 찾아 매번 list를 갱신하고 N이 그 안에 속해있는지 검증했다. 그리고 그 N이 속한 층을 출력했다.

시간 초과로 틀렸다. 돌아가긴 하는데, N이 어떤 범위에 속하는지 찾아야한다는 생각에 list와 in을 써서 복잡해졌다.

N = int(input())
i = 1
init = 2

while init <= N:
    init += 6 * i
    i += 1

print(i)

chatGPT형님이 고쳐주신 깔끔한 코드다. 역시 간단한게 최고다. N이 초기값 이상일 때 i를 1씩 준다. 다음 범위까지 가지 못할 때 현재의 i가 정답이 된다.

코멘트.

수학적으로 간단한 코드를 짜는 법을 이번 챕터에서 배워야겠다. 간단한게 말은 쉽지만 어려운 것 같다.

profile
나는 김종언이다.

0개의 댓글