[프로그래머스 / C++] 코드 처리하기

YH·2023년 12월 10일
0

문제

코드 처리하기 : 문제 링크


문제 분석

  • 문자열 code가 주어진다. code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꾼다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어낸다. mode는 0과 1이 있으며, idx를 0부터 code의 길이 - 1까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동한다.

    mode가 0일 때

    • code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가한다.
    • code[idx]가 "1"이면 mode를 0에서 1로 바꾼다.
      mode가 1일 때
    • code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가한다.
    • code[idx]가 "1"이면 mode를 1에서 0으로 바꾼다.
  • 문자열 code를 통해 만들어진 문자열 ret를 return (단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return
  • 문자열 code를 통해 만들어진 문자열을 저장할 answer과 mode 상태를 저장할 문자 mode를 '0'으로 초기화. for loop를 통해 code의 첫번째부터 마지막 원소까지 순환하고, if ~ else if문을 통해 mode가 0과 1일 경우와 현재 원소가 0과 1일 경우를 구분하여 해당 인덱스의 문자를 answer에 저장하거나 mode를 변경. loop 탈출 후, if문을 통해 answer이 빈 문자열일 경우 "EMPTY"를 return하고, 이외의 경우 최종적으로 저장된 answer을 return

풀이

#include <string>

using namespace std;

string solution(string code) {
    string answer = "";
    char mode = '0';
    
    for(int i = 0; i < code.size(); ++i) {
        if(mode == '0') {
            if(code[i] != '1') {
                if(i % 2 == 0) answer += code[i];
            }
            else mode = '1';
        }
        else if(mode == '1') {
            if(code[i] != '1') {
                if(i % 2 == 1) answer += code[i];
            }
            else mode = '0';
        }
    }
    if(answer.empty()) return "EMPTY";
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글