Post

[Programmers] #181932 - 코드 처리하기 [Java][C++][Python]

문자열을 순회하며 '1'로 모드를 전환하고, 인덱스 홀짝과 모드가 일치하는 문자만 추려 반환하는 문제.

[Programmers] #181932 - 코드 처리하기 [Java][C++][Python]

문제 링크


1. 아이디어

문자열 code를 앞에서부터 순회하며, 현재 문자가 '1'이면 mode를 전환(0 ↔ 1)하고 다음 문자로 넘어간다. '1'이 아닌 문자는 현재 인덱스 i의 홀짝과 mode가 일치할 때만 결과 문자열 ret에 담는다 — mode가 0이면 짝수 인덱스, 1이면 홀수 인덱스의 문자만 남는 식이다. 초기 mode는 0이며, 순회를 마친 뒤 ret이 비어 있으면 "EMPTY"를 대신 반환한다.


2. 복잡도

접근시간공간
풀이$O(N)$$O(N)$

($N$ = code의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;

class Solution {
    public String solution(String code) {
        StringBuilder ret = new StringBuilder();
        int mode = 0;

        for (int i = 0; i < code.length(); i++) {
            char c = code.charAt(i);
            if (c == '1') {
                mode = 1 - mode;
                continue;
            }

            if (i % 2 == mode) ret.append(c);
        }

        if (ret.isEmpty()) return "EMPTY";
        return ret.toString();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;

string solution(string code) {
    string ret;
    int mode = 0;

    for (int i = 0; i < code.size(); i++) {
        char c = code[i];
        if (c == '1') {
            mode = 1 - mode;
            continue;
        }

        if (i % 2 == mode) ret += c;
    }

    if (ret.empty()) return "EMPTY";
    return ret;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(code):
    ret = ""
    mode = 0

    for i, c in enumerate(code):
        if c == "1":
            mode = 1 - mode
            continue

        if i % 2 == mode:
            ret += c

    if ret:
        return ret
    return "EMPTY"

This post is licensed under CC BY 4.0 by the author.