2292: 벌집 - Python

beaver.zip·2024년 12월 2일
1

[알고리즘] 백준

목록 보기
9/45

문제

https://www.acmicpc.net/problem/2292

풀이 1: 오답(시간초과)

N = int(input())
nums = [1]

for i in range(1, N+1):
    if N in nums:
        print(i)
        break
    nums += list(range(nums[-1]+1, nums[-1]+6*i+1))
  • 올해 2월에 제출한 코드였다.

풀이 2-1

N = int(input())
limit, y = 1, 1
while True:
    if N <= limit:
        print(y)
        break
    y += 1
    limit += 6 * (y-1)
  • y: 층 수, limit: 해당 층의 최대값
  • y가 1 증가; limit은 6*(y-1)만큼 증가
  • Nlimit 이하이다 == N은 해당 층에 속한다

풀이 2-2

N = int(input())
y, limit = 1, 1
while N > limit:
    y += 1
    limit += 6 * (y-1)
print(y)
  • 풀이 2-1While TrueWhile 탈출 조건으로 변경했다.

풀이 3: 등차수열의 합

N = int(input())
y = 1
while N > 3*y*(y-1)+1:
    y += 1
print(y)
  • 위 규칙에 아래 식을 적용하면,

  • 1+6×k(k1)2=3k23k+1=3k(k1)+11+6\times\frac{k(k-1)}{2} = 3k^2-3k+1 = 3k(k-1)+1

풀이 4: for문 (참고)

N = int(input())
y = 1
for i in range(N):
    y += i*6
    if N <= y:
        print(i+1)
        break

마치며

전역이 두 달 정도 남았을 때, 한창 사지방에서 진로에 관한 고민을 많이 했다.
그러던 중 친구가 전역하고 같이 우테코에 지원하자고 했고,
그렇게 백준을 시작했다.

자기 전 사지방에서 백준 문제를 인쇄해서 아침에 사무실에 가져갔고,
일과 시간 중 시간이 있을 때 백준 문제를 고민했던 것 같다.

궁금해서 지금까지의 제출 기록을 살펴보았는데,
첫 제출이 2월 21일이고, 3월 9일까지 97번 제출을 했다.
당시 나름 열심히 했던 것 같다.

그러다가 이 2292: 벌집1712: 손익 분기점 문제에서 막혔고,
이후에는 촉박하게 자격증 시험을 준비 하느라 더 이상 백준을 풀지 못하고 전역했다.

오늘 버스에서 이 문제를 고민하는데, 사지방에서 이 문제를 똑같이 고민하던 기억이 났다.
이 문제를 풀지 못해 스스로에게 화가 나있었는데, 친구가 내게 다가와 쉽게 생각하라며 힌트를 주려고 했다.
나는 내가 알아서 하겠다고 예민하게 반응했었는데, 전역하고 나서도 그 날이 두고두고 후회됐고, 지금도 후회된다.
참 좋은 친구였는데, 내가 보여줬던 한심한 모습들 때문에 편하게 연락을 하지 못하겠다.
보고싶다.

profile
NLP 일짱이 되겠다.

0개의 댓글