오늘은 이전 포스팅 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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 특정 형질을 가지는 대장균 찾기 ( SQL ) (1) | 2025.02.10 |
---|---|
프로그래머스 - [PCCE 기출문제] 10번 / 공원 C++ (0) | 2025.02.07 |
프로그래머스 - [PCCE 기출문제] 8번 / 버스 C++ (0) | 2024.11.16 |
프로그래머스 - [PCCE 기출문제] 7번 / 버스 C++ (0) | 2024.11.15 |
프로그래머스 - [PCCE 기출문제] 6번 / 물 부족 C++ (1) | 2024.11.14 |