[알고리즘문제풀기] x 사이의 개수

silver's avatar
Mar 28, 2025
[알고리즘문제풀기] x 사이의 개수

문제

내가 작성한 오답

: x로 끝날 경우 없다고 간주되어 출력이 되지 않는다 → 0으로 출력되어야 한다.
notion image
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

silver