[JAVA] 지폐 접기

NoHae·2025년 5월 21일
0

문제 출처

코딩테스트 연습 > 지폐 접기
https://school.programmers.co.kr/learn/courses/30/lessons/340199?gad_source=1&gad_campaignid=22499034228&gbraid=0AAAAAC_c4nBqyGbhH6ZxCs1AASce3i60S&gclid=Cj0KCQjwucDBBhDxARIsANqFdr0fiQgLlYJPv6YnMiglKedM87VoM-RcmeDyAMda8-jv5GW_z7B4tNMaAlTGEALw_wcB

문제 설명

지갑의 가로 세로 크기를 담은 1차원 배열 wallet, 지폐의 가로 세로 크기를 담은 1차원 배열 bill이 주어질 때, 지갑에 넣기 위해서 지폐를 최소 몇 번 접어야하는지 return 하라.

접근 방법

지갑의 가로 세로를 비교하여 더 큰 쪽을 walletMax, 작은 쪽을 walletMin으로 지정한다.
지폐도 똑같이 더 큰 쪽을 billMax, 작은 쪽을 billMin으로 지정한다.

이 후, billMax > walletMax || billMin > walletMin 조건을 이용하여 반복문을 진행한다.
반복문에서는 지폐의 큰 쪽이 작은쪽보다 크면 큰 쪽을 /2 하고, 그 값을 작은 쪽과 비교하여, 작은 쪽보다 더 작다면 둘이 swap한다.
해당 과정에서 answer을 1증가 시킨다.

class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        int walletMax = Math.max(wallet[0], wallet[1]);
        int walletMin = Math.min(wallet[0], wallet[1]);
        
        int billMax = Math.max(bill[0], bill[1]);
        int billMin = Math.min(bill[0], bill[1]);
        
        while(billMax > walletMax || billMin > walletMin){
            if(billMax > billMin){
                billMax /= 2;
                answer++;
                if(billMax < billMin){
                    int temp = billMax;
                    billMax = billMin;
                    billMin = temp;
                }
            } 
        }
        
        return answer;
    }
}

Review

class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        int walletMax = Math.max(wallet[0],wallet[1]);
        int walletMin = Math.min(wallet[0],wallet[1]);
        
        int billMax = Math.max(bill[0],bill[1]);
        int billMin = Math.min(bill[0],bill[1]);
        
        while(walletMax < billMax || walletMin < billMin){
            if(billMax > billMin){
                billMax /=2;
            }else{
                billMin /=2;
            }
            
            if(billMax < billMin){
                int temp = billMax;
                billMax = billMin;
                billMin = temp;
            }
            answer++;
        }
        return answer;
    }
}

알게된 점

어렵지 않은 문제였다.
사실 문제에서 풀이 과정을 주었기 때문에 그대로 구현하면 되었다.
하지만, 풀이 과정을 주지 않았더라면 조금 더 생각했을 것 같다.

문제푼 흔적


Review

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글