문제 설명
문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ myString의 길이 ≤ 100,000 myString은 알파벳 소문자로 이루어진 문자열입니다.
나의 코드
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer = new int[str.length];
for(int i=0; i<str.length; i++) {
answer[i] = str[i].length();
}
return answer;
}
}

split()을 사용하여 x를 기준으로 문자열 배열로 나타내고, 그만큼의 길이의 정수 배열을 선언하여 문자열 배열 요소마다의 길이를 정수 배열에 넣어줘서 답을 구했다. 그러나 마지막에 x가 존재하는 경우 0으로 처리되는 것이 생략되었다.
import java.util.Arrays;
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer = new int[str.length];
for(int i=0; i<str.length; i++) {
answer[i] = str[i].length();
}
if(myString.endsWith("x")) {
int[] temp = new int[answer.length+1];
temp = Arrays.copyOf(answer, answer.length+1);
temp[temp.length-1] = 0;
answer = temp;
}
return answer;
}
}
주어진 문자열의 마지막 문자가 x가 올 경우를 endsWith() 메소드를 통해 따로 조건문을 만들어 해결했다. 해결하는 데에 또 길이와 인덱스 간의 차이에 대해 혼동이 있어서 에러를 많이 마주쳤다 X( ,, 많이 문제를 풀면서 얼른 헷갈리지 않게 적응하자..!
다른 사람 코드
import java.util.Arrays;
class Solution {
public int[] solution(String myString) {
return Arrays.stream(myString.split("x", myString.length()))
.mapToInt(x -> x.length())
.toArray();
}
}
import java.util.*;
class Solution {
public Integer[] solution(String myString) {
return Arrays.stream(myString.split("x", -1)).map(String::length).toArray(Integer[]::new);
}
}
두 문제 다 stream을 사용해서 손 쉽게 해결.. 다른 문제들도 stream을 사용하면 가독성 좋게 코드가 짜여지는데 이번 문제는 stream으로 푸는 것과 일반적인 방식으로 푸는 코드 간의 차이가 커서 기록해둬본다!
class Solution {
public int[] solution(String myString) {
String[] result = myString.split("x");
int size = result.length;
if (myString.charAt(myString.length() - 1) == 'x'){
size += 1;
}
int[] answer = new int[size];
for (int i = 0; i < result.length; i++) {
answer[i] = result[i].length();
}
if (myString.charAt(myString.length() - 1) == 'x'){
answer[size - 1] = 0;
}
return answer;
}
}
느낀 점
문제들에 대한 여러 방법들이 있겠지만 그 문제를 보고 어떤 메소드를 사용해서 어떻게 푸는 것이 가장 효과적인 방법일지 고민을 잘 해야겠다. 이번 문제도 바로 split()을 잘 떠올리지 못했다 처음엔.. 😭 또한 아직 배열의 '길이'와 '인덱스'간의 차이를 복잡해지는 순간 헷갈리기 시작한다.. 반복 또 반복 학습이 답인 것 같다.