[백준/파이썬] 10275번 풀이

업데이트:



문제 정보


풀이

문제

강산이와 지현이는 모험 중에 어느 숲 속 깊숙히에서 신비한 동굴을 발견했다.

들떠서 동굴에 입장한 강산이와 지현이는 결국 동굴의 끝에서 거대한 금괴 하나를 발견했다.

하지만 둘이서 들고 나가기엔 금괴는 너무 거대하고 무거웠다.

방법이 없을까 고민하던 중, 지현이가 금괴에 숫자 n이 쓰여 있는 것을 발견했다.

그 순간 요정이 나타나 말했다.

  • 요정 : 이 금괴는 무거워. 이건 무려 2n 펨토그램인걸. 게다가 n은 62까지 갈 수 있다구.

  • 강산 : 어, 그렇다면 운이 좋은걸요! 지현이 가방은 정확히 a 펨토그램을 담을 수 있고, 제 가방은 b 펨토그램을 담을 수 있는데 이때 a + b = 2n을 만족하니까요!

  • 지현 : 근데 어떻게 금괴를 자르지?

  • 요정 : 내 마법으로 어떤 물건이든 정확히 반토막을 낼 수 있어. 근데 난 마법을 하루에 한 번밖에 못 쓰는데..

강산이와 지현이는 며칠 후, 금괴를 모두 나눠 갖고 동굴을 나섰다.

이때, 강산이와 지현이가 동굴을 나선 건 동굴에 들어온 뒤 며칠 뒤일까?

입력 요약
입력의 첫 줄엔 테스트 케이스의 수 t ≤ 1000 가 주어진다.

그리고 t줄에 걸쳐, 정수 n, a, b가 주어진다. ( a, b ≥ 1, a + b = 2n, 1 ≤ n ≤ 62.)

출력 요약
각 테스트 케이스마다 한 줄에 강산이와 지현이가 동굴을 최대한 빨리 떠났을 때 며칠이 지났는지 출력한다.

코드

import math
for t in range(int(input())):
    n,a,b=map(int,input().split())
    c=math.floor(math.log(a)/math.log(2))
    d=math.floor(math.log(b)/math.log(2))
    while a>0:
        if a>=2**c:a-=2**c
        c-=1
    while b>0:
        if b>=2**d:b-=2**d
        d-=1
    print(n-min(c,d)-1)

설명

핵심은 구현 관점에서 강산이와 지현이는 모험 중에 어느 숲 속 깊숙히에서 신비한 동굴을 발견했다.

들떠서 동굴에 입장한 강산이와 지현이는 결국 동굴의 끝에서 거대한 금괴 하나를 발견했다.

하지만 둘이서 들고 나가기엔 금괴는 너무 거대하고 무거웠다. …를 만족하도록 로직을 구성하는 것입니다.

코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.

경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.



이런 주제는 어떠신가요?

비슷한 난이도와 유형의 문제를 이어서 보면 풀이 감각을 더 빠르게 잡기 좋습니다.

댓글남기기