[Programmers] #120853 - 컨트롤 제트 [Java][C++][Python]
[Programmers] #120853 - 컨트롤 제트 [Java][C++][Python]
1. 아이디어
숫자와 "Z"가 공백으로 구분된 문자열 s가 주어질 때, s의 숫자들을 차례대로 더하는데 이때 "Z"가 나오면 바로 전에 더했던 숫자를 빼는 과정을 반복하여 최종 값을 구하는 문제다. s를 공백을 기준으로 토큰 단위로 분리한 후 앞에서부터 더하다가 "Z"가 등장하는 순간 이전에 더했던 숫자를 다시 빼는 과정을 반복하면 해결할 수 있다. "Z"가 연속으로 등장하지 않으므로 별도의 예외 처리 없이 해결할 수 있다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(1)$ |
($N$ = s의 길이)
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
22
import java.util.*;
class Solution {
public int solution(String s) {
StringTokenizer st = new StringTokenizer(s);
int sum = 0;
int prv = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (token.equals("Z")) {
sum -= prv;
} else {
int x = Integer.parseInt(token);
sum += x;
prv = x;
}
}
return sum;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int solution(string s) {
stringstream ss(s);
string token;
int sum = 0;
int prv = 0;
while (ss >> token) {
if (token == "Z") {
sum -= prv;
} else {
int x = stoi(token);
sum += x;
prv = x;
}
}
return sum;
}
1
2
3
4
5
6
7
8
9
10
11
def solution(s):
total, prv = 0, 0
for token in s.split():
if token == "Z":
total -= prv
else:
x = int(token)
total += x
prv = x
return total
This post is licensed under CC BY 4.0 by the author.