지폐 접기

하이솝·2026년 3월 6일

소요 시간: 11분 16초
문제의 난이도가 그렇게 높지 않아서 푸는 데에 큰 어려움은 없었음

나의 정답

class Solution {
    public boolean compareSize(int[] wallet, int[] bill) {
        if ((wallet[0] >= bill[0] && wallet[1] >= bill[1]) || wallet[0] >= bill[1] && wallet[1] >= bill[0]) { 
            return true;
        }
        else {
            return false;
        }
    }
    public void fold(int[] bill) {
        if (bill[0] >= bill[1]) {
            bill[0] /= 2;
        }
        else {
            bill[1] /= 2;
        }
    }
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        while(true) {
            if(compareSize(wallet, bill)) {
                break;
            }
            fold(bill);
            answer++;
        }
        return answer;
    }
}

AI 정답

import java.util.Arrays;
class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        // 지갑과 지폐의 가로, 세로 중 큰 값을 항상 0번 인덱스에 두도록 정렬
        // 이렇게 하면 비교 로직이 훨씬 단순해집니다.
        int wMin = Math.min(wallet[0], wallet[1]);
        int wMax = Math.max(wallet[0], wallet[1]);
        int bMin = Math.min(bill[0], bill[1]);
        int bMax = Math.max(bill[0], bill[1]);
        // 지폐가 지갑에 들어가지 않는 동안 반복
        while (bMin > wMin || bMax > wMax) {
            // 항상 긴 쪽을 접음
            bMax /= 2;
            // 접은 후 다시 대소 관계 재설정
            int tempMin = Math.min(bMin, bMax);
            int tempMax = Math.max(bMin, bMax);
            bMin = tempMin;
            bMax = tempMax;
            answer++;
        }
        return answer;
    }
}

0개의 댓글