알고리즘/코딩테스트-Programmers

[Programmers] PCCE 기출문제 9번 / 지폐 접기 JAVA

kwang2134 2024. 9. 13. 17:09
728x90
반응형
728x90

[Programmers] PCCE 기출문제 9번 / 지폐 접기 - LEVEL 1


접근

  • 구현

풀이

이중 우선순위 큐를 찾으러 가면서 프로그래머스에 PCCE와 PCCP 기출문제가 업데이트된 것을 보고 가져왔다. PCCE 1~8번은 너무 간단한 문제들이라 패스하고 9, 10번을 푼 뒤 PCCP로 넘어갈 생각이다. 우선 이 문제는 지폐를 접어서 지갑에 넣는 문제로 구름, 프로그래머스, 백준 중에 어디서 풀어봤던 문제인 거 같으나 기억이 잘 나지 않는다. 특별한 알고리즘이 필요한 문제도 아니고 간단한 구현 문제로 어려운 0 레벨 쉬운 1 레벨 정도가 되는 거 같다.

public static int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        while (!checkSize(wallet, bill)) {
            fold(wallet, bill);
            answer++;
        }
        return answer;
    }

오랜만에 프로그래머스에서 문제를 푸는데 역시 다른 사이트에 여러모로 참 편리한 거 같다. 값을 입력받는 과정도 없고 제출하기 전 코드를 실행해 보고 출력문도 찍을 수 있고 테스트케이스 추가도 간편하고 처음 코딩테스트 문제를 풀기 시작했던 게 프로그래머스이다 보니 IDE를 사용하지 않고 사이트에서 바로 풀 수 있었던 거 같다. 그땐 남들도 다 그렇게 푸는 줄 알았는데 데브코스 코딩테스트를 보고 난 뒤 IDE 없이 사이트에서 바로 풀었다고 하니 놀라는 사람들이 많았다. 문제로 돌아가서 지폐가 지갑에 들어갈 수 있는 크기가 될 때까지 접어야 하므로 while문의 조건으로 사용해 주었다. 지폐가 지갑에 들어가지 않는다면 지폐를 접어주고 접는 횟수를 늘려줬다.

private static void fold(int[] wallet, int[] bill) {
        if (bill[0] > bill[1]) {
            bill[0] /= 2;
        } else {
            bill[1] /= 2;
        }
    }

지폐를 접는 메서드로 문제를 제대로 안 읽고 풀었다가 삽질을 했다. 지폐를 접을 때 항상 긴 쪽을 접는 조건을 모르고 필요 없는 조건들을 덕지덕지 붙여서 풀었었는데 알고 보니 긴 쪽을 접으면 되는 거였다.

private static boolean checkSize(int[] wallet, int[] bill) {
        Arrays.sort(wallet);
        Arrays.sort(bill);

        return bill[0] <= wallet[0] && bill[1] <= wallet[1];
    }

마지막으로 지폐가 지갑에 들어가는지 체크해 주는 메서드이다. 정렬을 통해 지갑에 들어갈 수 작은 건 작은 것끼리 큰 건 큰 것끼리 매칭을 해주면 90도 돌렸을 때와 기본 상태를 다 체크할 수 있다.


전체 코드

import java.util.Arrays;

class Solution {
    public static int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        Arrays.sort(wallet);
        Arrays.sort(bill);

        while (!checkSize(wallet, bill)) {
            fold(wallet, bill);
            answer++;
        }
        return answer;
    }

    private static void fold(int[] wallet, int[] bill) {
       if (bill[0] > bill[1]) {
            bill[0] /= 2;
        } else {
            bill[1] /= 2;
        } 
    }
    private static boolean checkSize(int[] wallet, int[] bill) {
        Arrays.sort(wallet);
        Arrays.sort(bill);

        return bill[0] <= wallet[0] && bill[1] <= wallet[1];
    }
}
728x90