Post

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