본문 바로가기

알고리즘/프로그래머스

프로그래머스 - [PCCE 기출문제] 8번 / 버스 C++

SMALL

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

에 이어 8번 문제를 풀어보았다. 사실 해당 문제는 너무 쉽고, 만약 그냥 코드를 처음부터 구현을 해야 한다고 해도 너무 단순한 문제라고 판단이 되며, 함정도 없고 이해도 하기 쉬운 문제다.

 

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

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

문제 설명

 전달받은 닉네임을 온라인 서비스 특성상 제한되는 문자가 존재하는 것을 변경해 주는 프로그램을 만드는 문제다. 간단한 규칙 6가지만 코드에 기재하면 되는 문제다. 아래 규칙 중 주의해야 할 사항은 수정된 닉네임의 길이를 비교해야 한다는 것이다.

  • l을 대문자 I로 변경
  • 소문자 w를 두 개의 소문자 vv로 변경
  • 대문자 W를 두 개의 대문자 VV로 변경
  • 대문자 O를 0으로 변경
  • 수정된 닉네임의 길이가 4 미만일 경우에는 소문자 o를 길이가 4가 될 때까지 이어 붙이기
  • 수정된 닉네임의 길이가 8보다 클 경우 8번째 문자까지만 사용

출처 : 프로그래머스

 제한 사항은 크게 주의해야 할 사항은 없다.


문제풀이

 아래에서 한 구문 구문 해석하여 정리해 보면서 정답을 수정해야 할 구문을 찾아보겠다.

  • for(int i=0; i <nickname.size(); i++){ : 닉네임 문자 길이만큼 반복
  • if(nickname [i] == 'l'){ answer += "I"; } : l을 대문자 I로 변경
  • if(nickname [i] == 'w'){ answer += "vv"; } : l을 대문자 I로 변경
  • if(nickname [i] == 'W'){ answer += "VV"; } : l을 대문자 I로 변경
  • if(nickname [i] == 'O'){ answer += "0"; } : l을 대문자 I로 변경
  • if(answer.size() < 3){answer += "o";    } : 수정된 닉네임의 길이가 4 미만일 경우에는 소문자 o를 길이가 4가 될 때까지 이어 붙이기 -> 해당 규칙과는 상충되는 구현이 되어있으므로 해당 문구를 수정하면 되는 것을 알 수 있다.
  •     if(answer.size() > 8){  answer = answer.substr(0,8); }:수정된 닉네임의 길이가 8보다 클 경우 8번째 문자까지만 사용
#include <string>
#include <vector>

using namespace std;

string solution(string nickname) {
    string answer = "";
    for(int i=0; i<nickname.size(); i++){
        if(nickname[i] == 'l'){
            answer += "I";
        }
        else if(nickname[i] == 'w'){
            answer += "vv";
        }
        else if(nickname[i] == 'W'){
            answer += "VV";
        }
        else if(nickname[i] == 'O'){
            answer += "0";
        }
        else{
            answer += nickname[i];
        }
    }
    if(answer.size() < 3){
        answer += "o";
    }
    if(answer.size() > 8){
        answer = answer.substr(0,8);
    }
    return answer;
}

 

수정 전 문구

  • if(answer.size() < 3){answer += "o";    } 

수정 후 문구 

  •  while(answer.size() < 4){ answer += "o"; }
#include <string>
#include <vector>

using namespace std;

string solution(string nickname) {
    string answer = "";
    for(int i=0; i<nickname.size(); i++){
        if(nickname[i] == 'l'){
            answer += "I";
        }
        else if(nickname[i] == 'w'){
            answer += "vv";
        }
        else if(nickname[i] == 'W'){
            answer += "VV";
        }
        else if(nickname[i] == 'O'){
            answer += "0";
        }
        else{
            answer += nickname[i];
        }
    }
    while(answer.size() < 4){
        answer += "o";
    }
    if(answer.size() > 8){
        answer = answer.substr(0,8);
    }
    return answer;
}

결과

출처 : 프로그래머스

 

문제 링크 : 코딩테스트 연습 - [PCCE 기출문제] 8번 / 닉네임 규칙 | 프로그래머스 스쿨

 

프로그래머스

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

programmers.co.kr