본문 바로가기

프로그래머스(Java)/Level 1

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

728x90

코드 힌트

  1. 문제의 핵심:
    • 지갑에 들어갈 수 없는 지폐를 지갑에 넣기 위해, 지폐의 큰 쪽을 반으로 접는 문제입니다.
    • 지폐의 크기를 조정할 때마다 카운트를 증가시켜, 최종적으로 지폐가 지갑에 들어갈 수 있게 만들 때까지 접는 횟수를 구합니다.
  2. 지갑과 지폐 크기 비교:
    • wallet과 bill 배열을 비교하여 지갑이 지폐를 담을 수 있는지 확인합니다. 지갑과 지폐의 최소 크기와 최대 크기를 비교합니다.
  3. 지폐 접기 과정:
    • bill 배열에서 큰 값을 반으로 접어 크기를 줄입니다. 이 과정은 지갑에 들어갈 수 있을 때까지 반복됩니다.
  4. 최대/최소 크기 계산:
    • 지갑과 지폐 각각의 최대값과 최소값을 구해, 지갑과 지폐의 크기를 비교합니다.

 

 


정답은 더보기 클릭

더보기
더보기
class Solution {
    public int solution(int[] wallet, int[] bill) {
        int result = 0; // 지폐를 접은 횟수를 저장할 변수
        
        // 지폐가 지갑에 들어갈 수 있을 때까지 반복하여 접기
        while (!isAble(wallet, bill)) { 
            setSize(bill); // 지폐 중 큰 쪽을 반으로 접음
            result++; // 접을 때마다 카운트를 증가
        }
        
        return result; // 결과 반환: 지폐가 지갑에 들어갈 때까지 접은 횟수
    }
    
    // 지갑에 지폐가 들어갈 수 있는지 확인하는 메소드
    public boolean isAble(int[] wallet, int[] bill) {
        // 지갑의 최소, 최대 크기와 지폐의 최소, 최대 크기를 비교하여
        // 지갑이 지폐를 담을 수 있으면 true 반환
        return min(wallet) >= min(bill) && max(wallet) >= max(bill);
    }
    
    // 배열에서 최대값을 찾는 메소드
    public int max(int[] arr) {
        if (arr[0] > arr[1]) // 첫 번째 값이 더 크면 그 값 반환
            return arr[0];
        return arr[1]; // 두 번째 값이 더 크면 그 값 반환
    }
    
    // 배열에서 최소값을 찾는 메소드
    public int min(int[] arr) {
        if (arr[0] < arr[1]) // 첫 번째 값이 더 작으면 그 값 반환
            return arr[0];
        return arr[1]; // 두 번째 값이 더 작으면 그 값 반환
    }
    
    // 지폐의 큰 쪽을 반으로 접는 메소드
    public void setSize(int[] bill) {
        if (bill[0] > bill[1]) { // 첫 번째 지폐가 더 크면
            bill[0] /= 2; // 반으로 접음
        } else { // 두 번째 지폐가 더 크면
            bill[1] /= 2; // 반으로 접음
        }
    }
}

 

728x90