728x90
반응형

단순 사칙연산 문제이다. 처음엔 아래 코드같이 풀었는데 통과가 안됐다. 뭐가 틀린 건지 아직 모르겠다.

while 1:
    A, B, C, D = map(int, input().split())
    if A == B == C == D == 0:
        break
    s1 = max(A, B)/max(C, D)
    s2 = min(A, B)/min(C, D)
    s = max(s1, s2)
    if s < 1:
        res = 100
    elif s > 100:
        res = 1
    else:
        res = int(100//s)
    print(f"{res}%")

결국 남의 코드를 참고해서 이분 탐색으로 해결했다.

while 1:
    A, B, C, D = map(int, input().split())
    if A == B == C == D == 0:
        break
    if A < B: 
        A, B = B, A
    if C < D: 
        C, D = D, C
    s, e = 1, 100

    while s <= e:
        mid = (s + e) // 2
        a, b = A*mid/100, B*mid/100
        ok = 0 if a > C or b > D else 1
        if ok: 
            s = mid+1
            ans = mid
        else: 
            e = mid-1
    print(f"{ans}%")
728x90
반응형

+ Recent posts