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