Post

[Programmers] #181867 - x 사이의 개수 [Java][C++][Python]

[Programmers] #181867 - x 사이의 개수 [Java][C++][Python]

문제 링크


1. 아이디어

문자열 myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열의 길이를 각각 배열로 담아 반환하는 문제로 문자열 파싱 함수를 활용하면 간단하게 해결할 수 있다.


2. 복잡도

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

($N$ = myString의 길이)


3. 코드

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

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int[] solution(String myString) {
        String[] arr = myString.split("x", -1);
        int[] ans = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ans[i] = arr[i].length();
        }

        return ans;
    }
}

split을 활용해서 "x"를 기준으로 파싱했다. Java의 split은 끝에 오는 빈 문자열을 기본적으로 제거해서 limit을 -1로 주어 보존하도록 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;

vector<int> solution(string myString) {
    int n = myString.size();
    vector<int> v;
    int prv = 0;

    for (int i = 0; i < n; i++) {
        if (myString[i] == 'x') {
            v.push_back(i - prv);
            prv = i + 1;
        }
    }
    v.push_back(n - prv);

    return v;
}

myString의 각 문자를 순회하며 "x"를 만나면 길이를 벡터에 저장하는 과정을 반복했다. 길이의 시작점을 저장하는 변수 prv를 활용해 현재 인덱스와의 차로 길이를 계산했고 계산 후 다음 위치를 새로운 시작점으로 잡는 과정을 반복했다.

1
2
def solution(myString):
    return [len(s) for s in myString.split("x")]

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