알고리즘/프로그래머스

프로그래머스 - [PCCE 기출문제] 5번 / 심폐소생 C++

초심을 찾자 2024. 11. 14. 08:38
SMALL

오늘은 이전 포스팅 2024.10.27 - [알고리즘/프로그래머스] - 프로그래머스 - [PCCE 기출문제] 4번 / 병과분류 C++

에 이어 5번 문제를 풀어보았다. 개인적으로 헷갈릴만한 요지도 없는 문제인 것 같고, 초보자들에게는 Vector라는 자료구조를 짧지만 잠깐 공부할 수 있는 문제가 아닌가 싶은 생각이 든다.

 

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

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

문제 설명

 문제를 읽어보면 우리의 상식(?)이라고 할 수 있는 심폐소생술 지식도 알 수 있는 문제다. 그리고 전달받는 문자열을 심폐소생술 번호에 맞게 매칭하는 문제다. 그래서 단순하게 빈칸 넣기의 문제가 아니라고 생각해도 단순하게 문자열 비교 문제이구나라고 생각 할 수 있다.

출처 : 프로그래머스

 제한 사항은 한 번씩 포함되어 있다라는 내용이다. 만약 실무에서 구현을 한다면 동일한 번호가 있는지 확인하는 로직을 넣어 실수를 줄일 수 있을 것 같다.

출처 : 프로그래머스


문제풀이

 문제를 보면 아래에 3개의 빈칸이 존재한다. 두 개의 빈칸은 for문이 얼마만큼 돌아야 하는지에 관한 조건이며, 마지막 빈칸은 정답을 채울 때 값을 어떻게 넣을 것인지? 에 관한 질문이다.

 우리가 아래에서 보면 cpr[i] == basic_order [j]라는 문구를 통해 정답을 유추할 수 있다. i는 cpr 개수만큼 도는 조건이고, j는 basic_order 개수만큼 도는 것이다. 

Vector에서는 개수를 알 수 있는 방법 중 size라는 function이 있다. 사용 방법은 변수명.size()라는 함수를 사용하면 size_t 변수 type의 값을 반환한다. ※ 여기서 type이 달라 신경이 쓰인다면 static_cast<int>(변수명.size())라고 사용해도 된다.

마지막 빈칸은 answer에 값을 적재해야 하는데 여기서 주의할 점은 basic_order와 동일한 경우 j는 0부터 시작하기 때문에 +1을 하여 적재해야 한다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<string> cpr) {
    vector<int> answer = {0, 0, 0, 0, 0};
    vector<string> basic_order = {"check", "call", "pressure", "respiration", "repeat"};

    for(int i=0; i< 빈칸; i++){
        for(int j=0; j< 빈칸; j++){
            if(cpr[i] == basic_order[j]){
                answer[i] = 빈칸;
                break;
            }
        }
    }

    return answer;
}

 

아마 해당 문제에 정답 Case는 여러개가 존재할 수 없다. 다만 개발자의 성격에 따라 static_cast를 하는지에 관한 습관을 볼 수 있을지 않을까 싶다. 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<string> cpr) {
    vector<int> answer = {0, 0, 0, 0, 0};
    vector<string> basic_order = {"check", "call", "pressure", "respiration", "repeat"};

    for(int i=0; i<static_cast<int>(cpr.size()); i++){
        for(int j=0; j<static_cast<int>(basic_order.size()); j++){
            if(cpr[i] == basic_order[j]){
                answer[i] = j+1;
                break;
            }
        }
    }

    return answer;
}

결과

출처 : 프로그래머스

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/340203

 

프로그래머스

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

programmers.co.kr