문제
내가 작성한 오답
: x로 끝날 경우 없다고 간주되어 출력이 되지 않는다 → 0으로 출력되어야 한다.

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;
}
}
내가 작성한 정답
: new int[n]으로 배열을 생성하면, 모든 요소는 기본값 0으로 초기화되는 것을 이용
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer = new int[myString.endsWith("x")? str.length+1 : str.length];
for(int i=0; i< str.length; i++){
answer[i] = str[i].length();
}
return answer;
}
}
: 직접 0을 추가하는 코드 추가
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer = new int[myString.endsWith("x")?str.length+1:str.length];
int idx = 0;
for(String s: str){
answer[idx++] = s.length();
}
if(myString.endsWith("x")) answer[idx++] = 0;
return answer;
}
}
ArrayList
import java.util.*;
class Solution {
public int[] solution(String myString) {
ArrayList<Integer> answer = new ArrayList<>();
for(String s: myString.split("x")){
answer.add(s.length());
}
if(myString.endsWith("x")) answer.add(0);
return answer.stream()
.mapToInt(i->i)
.toArray();
}
}
stream
import java.util.*;
class Solution {
public int[] solution(String myString) {
return Arrays.stream(myString.split("x",-1))
.mapToInt(s-> s.length())
.toArray();
}
}
String.split(String regex, int limit) - split의 두번째 인자
imit의 동작 방식
1. limit > 0 (양수)
• 최대 limit개의 요소를 포함한 배열을 반환함.
• 마지막 요소에는 남은 모든 문자열이 포함됨.
• "oxooxoxxox".split("x", 3) → ["o", "oo", "ooxxox"]
2. limit == 0
• 기본 동작 (split("x")과 동일)
• 끝에 있는 빈 문자열 제거됨.
• "oxooxoxxox".split("x", 0) → ["o", "oo", "o", "", "o"]
3. limit < 0 (음수)
• 구분자가 마지막에 있어도 빈 문자열을 유지함.
다른 사람들의 정답
import java.util.Arrays;
class Solution {
public int[] solution(String myString) {
return Arrays.stream(myString.split("x", myString.length()))
.mapToInt(x -> x.length())
.toArray();
}
}
split(regex, limit)에서 limit > 0이면
→ 최대 limit개의 요소까지만 자르고 마지막 요소에 남은 문자열 전부 포함 + 빈 문자열 포함!
• limit이 충분히 크기만 하면, "x"로 나눈 모든 조각 + 마지막 빈 문자열까지 포함됨.
→ 모든 조각 + 마지막 빈 문자열까지 출력됨
class Solution {
public int[] solution(String myString) {
String[] split = (myString + " ").split("x");
int[] answer = new int[split.length];
for (int i = 0; i < answer.length; i++) {
answer[i] = split[i].replace(" ", "").length();
}
return answer;
}
}
Share article