본문 바로가기

알고리즘/프로그래머스

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

SMALL

오늘은 이전 포스팅 2024.11.16 - [알고리즘/프로그래머스] - 프로그래머스 - [PCCE 기출문제] 8번 / 버스 C++

에 이어 9번 문제를 풀어보았다. PCCE 기출문제 중 처음으로 코드를 직접 구현하여 문제를 풀어야 하는 문제였다. 그래서 PCCE 기출문제를 풀고 있던 초급 개발자들에게는 어려울 수 있으나, 다행히도 문제가 간단해서 큰 문제는 되지 않을 것 같다. 

 

알고리즘 난이도 및 시간 ( ※ 개인적인 의견 )

  • 난이도 : Level 2 ( ※ Min : 0, Max : 10 )
  • 풀이 시간 : 15분
  • 제출 횟수 : 1번 
  • 풀이 결과 : Pass

문제 설명

  민수가 지갑에 지폐를 넣기 위해서 몇 번을 접어야 하는지에 관한 문제다. 지폐를 접는 규칙은 항상 길이가 긴 쪽을 반으로 접어야 한다는 것이다. 90도 돌려서 넣을 수 있다는 의미는 가로길이를 X 세로 길이를 Y라고 할 때 지폐와 지갑에 같은 X, Y 끼리만 비교하는 것이 아니라 X, X or X, Y를 비교하여 하나라도 만족하면 넣을 수 있다는 의미다.

출처 : 프로그래머스

 해당 문제도 제한사항에서 확인해야 할 내용은 크게 없다.

출처 : 프로그래머스


문제풀이

 나는 지폐를 지갑에 넣을 수 있는지 확인하는 함수와 지갑에 넣을 때까지 지폐를 접는 함수를 만들어서 문제를 풀었다.

아래 코드에 주석을 확인하면 이해하는데 큰 어려움이 없을 것이라 생각이 든다.

 

#include <string>
#include <vector>

using namespace std;

// 지폐를 지갑에 넣을 수 있는지 확인하는 함수
bool IsPossiblePutInWallet(const vector<int> &wallet , const vector<int> bill)
{
    bool bIsPossible = false;
    if(  wallet[0] >= bill[0] // 지폐의 가로가 지갑의 가로보다 작고, 지폐의 세로가 지갑의 세로보다 작을 때
      && wallet[1] >= bill[1])
    {
        bIsPossible = true;
    }
    
    if( wallet[0] >= bill[1] // 지폐의 가로가 지갑의 세로보다 작고, 지폐의 세로가 지갑의 가로보다 작을 때
      && wallet[1] >= bill[0])
    {
        bIsPossible = true;
    }
    
    return bIsPossible;
}

// 지폐를 지갑에 넣을 수 있을 때 까지 반으로 접는 함수
int GetAnswer(const vector<int> &wallet , vector<int> &bill)
{
    int answer = 0 ;
    while( false == IsPossiblePutInWallet(wallet, bill))
    {
        if( bill[0] > bill[1]) // 더 길이가 큰 놈을 접기 위한 로직
        {
            bill[0] = (bill[0] / 2);
        }
        else
        {
            bill[1] = (bill[1] / 2);
        }
        answer ++ ;
    }
    return answer;
}


int solution(vector<int> wallet, vector<int> bill) {
    int answer = 0;
    answer = GetAnswer(wallet, bill);
    return answer;
}

결과

출처 : 프로그래머스

문제 링크 : 코딩테스트 연습 - [PCCE 기출문제] 9번 / 지폐 접기 | 프로그래머스 스쿨

 

프로그래머스

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

programmers.co.kr