[Python] 막대기 - 백준 1094

찐새·2022년 6월 21일

코딩테스트

목록 보기
14/53
post-thumbnail

막대기- 백준 1094

풀이

x = int(input())
sticks = [64]
remain = 0
while True:
    remain = sum(sticks)
    if remain == x:
        break
    tmp = sticks.pop() // 2
    sticks.append(tmp)
    if sum(sticks) < x:
        sticks.append(tmp)

print(len(sticks))

자료구조인 스택의 속성을 이용했다. 가장 짧은 막대기가 sticks의 맨 끝에 들어가기 때문에 sticks.pop()으로 꺼낼 수 있다.

1-2 조건을 역으로 생각하면, 가장 짧은 막대의 절반을 제외한 나머지의 합이 원하는 사이즈보다 작을 때 제외했던 절반을 다시 넣어 합하면 된다.

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글