프로그래머스 Level 1 | 지폐접기 | Python

tomkitcount·2025년 9월 24일

알고리즘

목록 보기
187/304

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/340199


지갑과 지폐의 크기가 배열로 주어진다.
ex 1)
wallet = [30, 15], bill = [26,17]
이 bill이 지갑에 들어가지 않는다면 접어서 넣을 수 있다.
단 접을 때는 긴 쪽을 반 접는다. 즉 저기선 26을 반 접어서 13,17 이 만들어져서, 90도 돌려서 wallet에 들어가는 개념이다.
즉 순서는 중요하지 않고, 각각 값이 wallet에 0,1번째 인덱스보다 작기만 하면 지갑에 들어가는 것으로 간주한다.

이 문제는 친절하게 구하는 코드도 말로 주었기 때문에 코드로만 옮기면 된다.


첫 해답

def solution(wallet,bill):
    answer = 0
    while min(bill) > min(wallet) or max(bill) > max(wallet):
        if bill[0] > bill[1]:
            bill[0] /= 2
        
        else:
            bill[1] /= 2
   
        answer += 1

    return answer

문제에서 주어진 과정을 그대로 코드로 옮겼더니 프로그래머스 20개의 테스트 케이스 중 딱 한개의 테스트 케이스에서 통과를 못했다. 어떤 반례가 있었을까?

이유는 /= 이 연산은 실수 나눗셈 연산이었기 때문이었다.
//= 을 해줘야 정수로 나눗셈을 처리해주게 되고 모든 테스트코드에서 통과하게 된다.

해답 및 풀이

def solution(wallet,bill):
    answer = 0
    while min(bill) > min(wallet) or max(bill) > max(wallet):
        if bill[0] > bill[1]:
            bill[0] //= 2
        
        else:
            bill[1] //= 2
   
        answer += 1

    return answer
profile
To make it count

0개의 댓글