본문 바로가기
  • Let's study
PS/Programmers

[프로그래머스 Lv.1] 지폐 접기(Java)

by 코딩고수이고파 2026. 10. 6.

문제

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

 

프로그래머스

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

programmers.co.kr

풀이

지폐를 접을 때마다 현재 가로와 세로 중 더 긴 변을 절반으로 접는 방식이다.

먼저 지갑의 가로와 세로를 w, h에 저장한다. 이후 지폐의 방향을 바꿔 넣을 수도 있으므로 다음 두 경우 중 하나라도 만족하면 지갑에 들어갈 수 있는 상태이다.

 
if((w>=bill[0] && h>=bill[1]) || (w>=bill[1] && h>=bill[0])){
    break;
}
 

지갑에 들어가지 않는다면 bill[0]과 bill[1] 중 더 긴 변을 절반으로 접는다.

 
if(bill[0]>bill[1])
    bill[0]/=2;
else
    bill[1]/=2;

answer++;
 

두 변의 길이가 같은 경우에는 else에서 bill[1]을 절반으로 줄이게 되지만, 어느 변을 접어도 결과는 동일하다.

이 과정을 지폐가 지갑에 들어갈 수 있을 때까지 반복하고, 접은 횟수인 answer를 반환하는 방식이다.

코드

class Solution {
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        int w = wallet[0];
        int h = wallet[1];

        while(true){
            if((w>=bill[0] && h>=bill[1]) || (w>=bill[1] && h>=bill[0])){
                break;
            }

            if(bill[0]>bill[1])
                bill[0]/=2;
            else
                bill[1]/=2;

            answer++;
        }
        
        return answer;
    }
}

댓글