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

728x90

코딩 문제를 풀어보려다가 PCCP와 PCCE를 알게되었습니다.

PCCP 문제를 풀다가 예제 테스트 케이스는 성공햇지만 제출하면 그중 테스트 케이스 일부에서 에러가 발생해서 못한적이 있습니다...

일단 보류로 해두고 다른 문제들을 풀다가 PCCE도 있다는 것을 알게되었습니다.

PCCP : (프로그래머스 코딩전문역량인증시험)

PCCE : (프로그래머스 코딩필수역량인증시험)

이렇게 대충 알고 있으면 될 것같습니다.

https://certi-guide.grepp.co/579a316d-e160-4b53-b468-a9cca60b34ac

 


https://school.programmers.co.kr/learn/courses/30/lessons/340199?language=java

 

프로그래머스

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

programmers.co.kr

 

확인내용

1. 지폐의 길이 비교

2. 지갑의 길이 비교 

3. 지폐의 가로, 세로 중 긴값을 먼저 절반 접는다.


코드로직

1. 지값, 지폐의 최솟값과 최댓값을 구합니다.

2. while 문으로 계속 돌다가 지폐가 지갑에 들어가는 순간 break;

3. 값 비교할 때 큰 값이 먼저 접히는 것을 우선순위로 설정해야합니다.

 

 

최종 코드

class Solution {
    // wallet : 지갑의 가로, 세로
    // bill : 지폐의 가로 세로
    public int solution(int[] wallet, int[] bill) {
        int answer = 0;
        
        int walletSmall = 0;
        int walletLarge = 0;
        int billSmall = 0;
        int billLarge = 0;
        
        walletSmall = Math.min(wallet[0], wallet[1]);
        walletLarge = Math.max(wallet[0], wallet[1]);
        billSmall = Math.min(bill[0], bill[1]);
        billLarge = Math.max(bill[0], bill[1]);
        
        
        // for문으로 길이를 비교하며 지갑보다 지폐의 길이가 짧아야 한다
        while(true){
            if(walletLarge < billLarge || walletSmall < billSmall) { // 지폐의 큰값이 지값의 큰값보다 크면 접읍
                billLarge /= 2;
                answer ++;
            }
            if(billLarge < billSmall){ // 정수 두자리수 이기 때문에 지폐의 큰값과 작은 값을 비교
                int temp = billLarge;
                billLarge = billSmall;
                billSmall = temp;
            }
            
            if(walletSmall >= billSmall && walletLarge >= billLarge){
                break;
            }
        }
        
        return answer;
    }
}

 

마무리

자바를 오랜만에 했더니 ; 을 안넣어서 발생된 에러가 여러번 나왔습니다.. (자바스크립트는 ; 을 안해두 되서)

뭐 아무튼 간만에 하느라 min, max값 구하는 것도 if절로 했다가 리펙토링하면서 min, max로 썼습니다.

이 문제에서는 지폐의 긴값을 먼저 접는다는 게 핵심인것 같습니다! 

그리고 접은 이후에 지폐를 돌릴 수 있기 때문에 지폐의 최솟값, 최댓값을 비교해 줍니다.

유지되거나 변경된 최댓값을 가지고 2로 나누어줍니다. 물론 answer도 +1 해줘야 합니다.

마지막에는 지폐를 지갑에 넣을 수 있냐 없냐의 if 문을 작성하면 됩니다.

 

너무 어렵게 생각하면 잘 안되더라구요.. 

보통 프로젝트를 할 때 사용자 에러를 최소화하고, 모든 경우의 수를 고려하려고 하는 편인데 그럴 수록 시간이 지체되는 것 같습니다. 일을 빨리해야 하는 SI 업체에서는 주변 시선이 안 좋은 것 같습니다.(개인적인 생각입니다)

좀더 코딩을 할 때 빠르게 생각해보려고 많이 시도해보려고 합니다. 글 읽어주셔서 감사합니다.

 

728x90