코딩테스트-코드처리하기

728x90
반응형

8점 받은 코드. 나름 뿌듯함에 올려본다.

문제

문자열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 하는 solution 함수를 완성해 주세요.

단, 시작할 때mode는 0이며, return 하려는ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string solution(string code) {
    string answer = "";
    int idx = 0;
    int mode = 0;

    answer.reserve(code.size());

    for(char c : code)  {
        if(c != '1')    {
            if(idx % 2 == mode) {
                answer.push_back(c);
            }
        }
        else {
            mode = !mode;
        }

        idx++;
    }

    if(answer.empty())  {
        answer = "EMPTY";
    }

    return answer;
}

int main()
{
    cout << solution("abc1abc1abc") << endl;
}
728x90
반응형