
링크 : 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