알고리즘/구현

[PCCP 기출 9번] 지폐 접기

moongi 2025. 6. 1. 20:15
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제 유형

  • 구현

 

문제 난이도

  • Lev1

 

문제 분석

문제에서 주어진 로직대로 구현하면 된다.

1. 지폐를 접은 횟수를 저장할 정수 변수 answer를 만들고 0을 저장합니다.
2. 반복문을 이용해 bill의 작은 값이 wallet의 작은 값 보다 크거나 bill의 큰 값이 wallet의 큰 값 보다 큰 동안 아래 과정을 반복합니다.
2-1. bill[0]이 bill[1]보다 크다면 bill[0]을 2로 나누고 나머지는 버립니다.
2-2. 그렇지 않다면 bill[1]을 2로 나누고 나머지는 버립니다.
2-3. answer을 1 증가시킵니다.
3. answer을 return합니다.

아래 전체 코드에서 flow 대로 코드를 구현해두었다.

 

 

전체 코드

import java.util.*;
import java.io.*;

class Solution {
    public int solution(int[] wallet, int[] bill) {
    	// 1. 지폐를 접은 횟수를 저장할 정수 변수 answer를 만들고 0을 저장합니다.
        int answer = 0;
        

        int wMin = wallet[0] < wallet[1] ? wallet[0] : wallet[1];
        int wMax = wallet[0] < wallet[1] ? wallet[1] : wallet[0];
        
        int bMax = bill[0] < bill[1] ? bill[1] : bill[0];
        int bMin = bill[0] < bill[1] ? bill[0] : bill[1];
		
        // 2. 반복문을 이용해 bill의 작은 값이 wallet의 작은 값 보다 크거나 bill의 큰 값이 wallet의 큰 값 보다 큰 동안 아래 과정을 반복합니다.
        while (wMin < bMin || bMax > wMax) {
            
            // 2-1. bill[0]이 bill[1]보다 크다면 bill[0]을 2로 나누고 나머지는 버립니다.
            if(bill[0] < bill[1]) bill[1] /= 2;
            // 2-2. 그렇지 않다면 bill[1]을 2로 나누고 나머지는 버립니다.
            else bill[0] /= 2;
            
            bMax = bill[0] < bill[1] ? bill[1] : bill[0];
            bMin = bill[0] < bill[1] ? bill[0] : bill[1];
            
            // 2-3. answer을 1 증가시킵니다.
            answer++;
        }
        
        // 3. answer을 return합니다.
        return answer;
    }
}
728x90
반응형