Baekjoon 문제 풀기 (2292번 : 벌집) Python

2292번 : 벌집

1. 문제읽기


규칙 수열 구현하기

와 수열을 코드로 나타내기가 너무 힘들었다.
규칙은 찾았는데, 이 규칙으로 어떻게 문제를 풀어야할지 감이 오지 않았다.
결국 포기했다..

차근차근 생각해보면 쉬운 문제이다.
1, 7, 19, 37, 58의 수열을 찾았고, 각 값이 6의 배수로 증가한다는 것도 찾았다.
막혔던 부분은 6의 배수로 증가하는 값을 어떻게 나타내느냐였다.
단순하게 변수 하나를 두고 7이 될때 2, 19가 될때 3, 37이 될때 4… 이런식으로 생각해보니 방 갯수와 똑같이 나타난다는 것을 깨달았고, 이것이 곧 답이였다.

문자열, 몫, 나머지값 등을 생각해서 코드를 짜보았지만 입력 값의 범위가 너무 많아 내가 생각한 코드에는 맞지 않았다.
반복문을 사용하여 숫자가 증가하는 단계의 수를 카운트하는 방법이 있었다.
앞으로 수열 구현 문제를 만나면 반복문도 꼭 체크해봐야겠다.

2. 제출 코드


n = int(input())

bee = 1
count = 1

while n > bee:
    bee += 6*count
    count += 1

print(count)

3. 공부할 것


그나저나 수업에서 반복문 배운 뒤인데 이런 문제도 못풀다니 상심이 컸다.
너무 오랜시간 붙잡고 있었던 문제였기 때문에, 체크하고 나중에 다시 풀어봐야겠다.

====== 9/30 재도전!

쉽게 풀 수 있을 줄 알았는데 1시간은 걸린 것 같다.
정답 코드를 보니 왜이렇게 짧은지…
bee += 6*count 이 로직이 그렇게 생각이 안났다.
그래도 어떻게 푸는지 감은 잡아서 더러운 코드였지만 풀 수 있었다!
bee와 count가 1부터 시작했으면 더 정답코드에 가깝게 생각할 수 있었을 것 같은 아쉬움이 남는다.

n = int(input())


def func(num):
    count = 0
    i = 0
    bee = 0

    if num == 1:
        return 1

    while num >= bee+2:
        bee += 6*(i+1)
        count += 1
        i += 1

    return count+1


print(func(n))

댓글남기기