알고리즘

[프로그래머스] -PCCE 기출문제 9번 / 지폐 접기

예림밈 2025. 4. 25. 16:13

문제

민수는 다양한 지폐를 수집하는 취미를 가지고 있습니다. 지폐마다 크기가 달라 지갑에 넣으려면 여러 번 접어서 넣어야 합니다. 예를 들어 지갑의 크기가 30 15이고 지폐의 크기가 26 17이라면 한번 반으로 접어 13 * 17 크기로 만든 뒤 90도 돌려서 지갑에 넣을 수 있습니다. 지폐를 접을 때는 다음과 같은 규칙을 지킵니다.지폐를 접을 때는 항상 길이가 긴 쪽을 반으로 접습니다. 접기 전 길이가 홀수였다면 접은 후 소수점 이하는 버립니다. 접힌 지폐를 그대로 또는 90도 돌려서 지갑에 넣을 수 있다면 그만 접습니다.
지갑의 가로, 세로 크기를 담은 정수 리스트 wallet과 지폐의 가로, 세로 크기를 담은 정수 리스트 bill가 주어질 때, 지갑에 넣기 위해서 지폐를 최소 몇 번 접어야 하는지 return하도록 solution함수를 완성해 주세요.
지폐를 지갑에 넣기 위해 접어야 하는 최소 횟수를 구하는 과정은 다음과 같습니다.

 

코드

import java.util.Arrays;
class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        // bill과 wallet의 최대값과 최소값
        int maxBill = Arrays.stream(bill).max().getAsInt();
        int minBill = Arrays.stream(bill).min().getAsInt();
        int maxWallet = Arrays.stream(wallet).max().getAsInt();
        int minWallet = Arrays.stream(wallet).min().getAsInt();
       
        while(true){
            int temp=minBill;
            if(maxBill<=maxWallet && minBill<=minWallet){
               break;
            }
            if(maxBill>=minBill){
                maxBill=maxBill/2;
            }
            else{
                minBill=minBill/2;
            }
            answer+=1;
            
            if(maxBill<temp){
                minBill=maxBill;
                maxBill=temp;
                
            }
        }
      
        return answer; 
    }
}