[Programmers] #181890 - 왼쪽 오른쪽 [Java][C++][Python]
문자열 리스트에서 l과 r 중 먼저 나오는 것을 찾아, l이면 그 왼쪽, r이면 그 오른쪽의 원소들을 반환하는 워밍업 문제.
[Programmers] #181890 - 왼쪽 오른쪽 [Java][C++][Python]
1. 아이디어
문자열 리스트 str_list를 앞에서부터 순회하며 처음 만나는 "l" 또는 "r"을 찾는다. "l"을 먼저 만나면 그 앞쪽 원소들을, "r"을 먼저 만나면 그 뒤쪽 원소들을 잘라 반환한다. 먼저 만난 쪽에서 바로 잘라 반환하므로 두 문자의 등장 횟수나 뒤에 오는 순서는 신경 쓸 필요가 없다. 순회가 끝날 때까지 둘 다 만나지 못하면 빈 리스트를 반환한다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = str_list의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;
class Solution {
public String[] solution(String[] str_list) {
int n = str_list.length;
for (int i = 0; i < n; i++) {
if (str_list[i].equals("l")) {
return Arrays.copyOfRange(str_list, 0, i);
}
if (str_list[i].equals("r")) {
return Arrays.copyOfRange(str_list, i + 1, n);
}
}
return new String[0];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;
vector<string> solution(vector<string> str_list) {
int n = str_list.size();
for (int i = 0; i < n; i++) {
if (str_list[i] == "l") {
return vector<string>(str_list.begin(), str_list.begin() + i);
}
if (str_list[i] == "r") {
return vector<string>(str_list.begin() + i + 1, str_list.end());
}
}
return {};
}
1
2
3
4
5
6
7
8
def solution(str_list):
for i, s in enumerate(str_list):
if s == "l":
return str_list[:i]
if s == "r":
return str_list[i + 1 :]
return []
This post is licensed under CC BY 4.0 by the author.