오늘은 이전 포스팅 2024.11.14 - [알고리즘/프로그래머스] - 프로그래머스 - [PCCE 기출문제] 6번 / 물 부족 C++
에 이어 7번 문제를 풀어보았다. 이때까지 풀었던 PCCE 기출문제 시리즈 중 가장 문제가 길었다. 보통 이런 문제의 경우 문제를 다 이해하면 좋겠지만, 문제의 흐름만 파악하고 입출력 예시를 통해 이해하는 게 가장 좋다.
알고리즘 난이도 및 시간 ( ※ 개인적인 의견 )
- 난이도 : Level 1.5 ( ※ Min : 0, Max : 10 )
- 풀이 시간 : 5분
- 제출 횟수 : 1번
- 풀이 결과 : Pass
문제 설명
영진이가 버스를 탑승할 때 남아있는 좌석이 몇 자리인지 정답을 구하는 문제다. 문제에 딱히 함정은 없다. 다만 우리가 버스를 생각해 보면 서서 타는 승객도 있기 때문에 혹시나 계산 시 남은 좌석을 -로 반환하는? 것에 대한 예외처리만 있으면 된다는 것만 생각하면 된다.
제한사항도 딱히 복잡한 사항은 없고, "-" 는 딱히 고려해도 되지 않아도 된다는 점만 캐치하면 된다.
문제풀이
오늘 문제는 코드를 보면 함수가 너무 많이 존재해서 함수별 역할을 정리하고 어떻게 활용하는 게 정답인지 설명하는 식으로 풀이를 해보고자 한다.
- func1 : num이라는 변수를 전달받아 num이 0보다 작으면 0을 반환하고 그 이외에는 num을 반환하는 함수다. 그러면 용도가 무엇일까? 생각을 해볼 때 음수의 값을 전달받으면 0으로 처리해 주는 함수라고 할 수 있다. 문제 설명에서 언급했던 남은 좌석이 -로 계산될 경우 예외처리 시 사용할 수 있는 함수로 보면 된다.
- func2 : fun1과 반대로 num이 양수면 0을 반환하고, 음수면 그대로 반환하는 함수다. 혹시 on과 off를 반대로 생각하면 절댓값을 활용하여 fun1과 같이 활용할 수 있을 것 같다.
- func3 : string Type의 vector를 전달받아, "off" 문자열 개수를 반환하는 함수다.
- func4 : func3과 같은 인자를 전달받고, "on" 문자열 개수를 반환하는 함수다.
#include <string>
#include <vector>
using namespace std;
int func1(int num){
if(0 > num){
return 0;
}
else{
return num;
}
}
int func2(int num){
if(num > 0){
return 0;
}
else{
return num;
}
}
int func3(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "Off"){
num += 1;
}
}
return num;
}
int func4(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "On"){
num += 1;
}
}
return num;
}
int solution(int seat, vector<vector<string>> passengers) {
int num_passenger = 0;
for(int i=0; i<passengers.size(); i++){
num_passenger += func 빈칸;
num_passenger -= func 빈칸;
}
int answer = func 빈칸;
return answer;
}
해당 문제를 풀 수 방법은 "off"를 기준으로 문제를 푸는 방법과 "on"을 기준으로 문제를 푸는 방법이 있다. 나는 두 가지 방법 중 탑승자를 기준으로 계산했기 때문에 "on"을 기준으로 +하고 "off"를 기준으로 -하였다. 그렇기 때문에 배정된 좌석 - 탑승자수로 문제를 풀었기 때문에 아래와 같이 정답을 작성하였다.
방법 1
#include <string>
#include <vector>
using namespace std;
int func1(int num){
if(0 > num){
return 0;
}
else{
return num;
}
}
int func2(int num){
if(num > 0){
return 0;
}
else{
return num;
}
}
int func3(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "Off"){
num += 1;
}
}
return num;
}
int func4(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "On"){
num += 1;
}
}
return num;
}
int solution(int seat, vector<vector<string>> passengers) {
int num_passenger = 0;
for(int i=0; i<passengers.size(); i++){
num_passenger += func4(passengers[i]);
num_passenger -= func3(passengers[i]);
}
int answer = func1(seat - num_passenger);
return answer;
}
방법2
방법 1과 반대로 "off"를 기준으로 계산하는 방식이다. 이럴 경우 남아있는 승객이 -이기 때문에 역으로 seat + num_passenger로 계산하면 된다.
#include <string>
#include <vector>
using namespace std;
int func1(int num){
if(0 > num){
return 0;
}
else{
return num;
}
}
int func2(int num){
if(num > 0){
return 0;
}
else{
return num;
}
}
int func3(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "Off"){
num += 1;
}
}
return num;
}
int func4(vector<string> station){
int num = 0;
for(int i=0; i<station.size(); i++){
if(station[i] == "On"){
num += 1;
}
}
return num;
}
int solution(int seat, vector<vector<string>> passengers) {
int num_passenger = 0;
for(int i=0; i<passengers.size(); i++){
num_passenger += func3(passengers[i]);
num_passenger -= func4(passengers[i]);
}
int answer = func1(seat + num_passenger);
return answer;
}
결과
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/340201
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - [PCCE 기출문제] 9번 / 지폐 접기 C++ (0) | 2024.11.17 |
---|---|
프로그래머스 - [PCCE 기출문제] 8번 / 버스 C++ (0) | 2024.11.16 |
프로그래머스 - [PCCE 기출문제] 6번 / 물 부족 C++ (1) | 2024.11.14 |
프로그래머스 - [PCCE 기출문제] 5번 / 심폐소생 C++ (2) | 2024.11.14 |
프로그래머스 - [PCCE 기출문제] 4번 / 병과분류 C++ (3) | 2024.10.27 |