프로그래머스

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

코 밑 2024. 12. 23. 16:37
Contents

https://school.programmers.co.kr/learn/courses/30/lessons/340199

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 자체는 어렵지 않다 지갑에 지폐가 들어갈 때까지 가로 세로 반으로 접어서 접는 회수를 반환하면 됨

접었을 때 소수점이 생긴다면 버린다

접을 때는 긴 쪽으로만 접어서 메소드를 만들어줬다 무조건 큰 수가 0번 항으로 오게끔

지폐는 90도 돌려서 들어갈 수도 있다

 

근데 테스트 케이스가 1번만 빼고 다 되는겨 그래서 질문하기에 나랑 같은 사람이 있었다

알고보니까 지폐를 안접는 경우를 생각을 안했던 것이었음~

// 프로그래머스 지폐 접기
// 지폐마다 여러번 접어서 지갑에 넣어야 함
// 지폐는 돌려서 넣을 수도 있음
// 1. 항상 긴 쪽을 반으로 접는다
// 2. 접기 전 길이가 홀수라면 소수점 이하는 버림
// 3. 접힌 지폐가 들어간다면 그만 접는다
// 최소 접는 횟수 반환
class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;

        // 긴쪽 0으로 다 보냄
        wallet = charr(wallet);
        bill = charr(bill);

        while (true) {
            // 지갑 길이와 일치하거나 작아지면 종료, 0이 입력될 수도 있음
            if (wallet[0] >= bill[0] && wallet[1] >= bill[1])
                break;
            // 90도 돌려서 한번 더 확인 종료
            if (wallet[0] >= bill[1] && wallet[1] >= bill[0])
                break;

            // 긴 것[0]만 접음
            bill[0] = bill[0] / 2;
            answer++;

            bill = charr(bill);
        }

        return answer;
    }

    // 배열 큰게 앞으로 오게 하는 메소드
    public int[] charr(int[] arr) {

        return (arr[0] > arr[1]) ? new int[] { arr[0], arr[1] } : new int[] { arr[1], arr[0] };
    }
}

 

ezez