[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.