Skip to main content

47. [Java] x 사이의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/181867

  • 문자열 myString이 주어진다.
  • myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return

  • 1 ≤ myString의 길이 ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

정답코드

class Solution {
    public int[] solution(String myString) {
        String[] str = myString.split("x", -1); // 빈 문자열 포함
        int[] answer = new int[str.length];
        for (int i = 0; i < str.length; i++) {
            answer[i] = str[i].length();
        }
        return answer;
    }
}
split(String regex, int limit)
String[] arr = myString.split("x", -1);

자바의 split(String regex, int limit)에서 limit은 아래를 의미한다.

limit 값

동작 설명

양수 N

최대 N개의 요소까지만 자름

0

끝의 빈 문자열은 제거

음수 (-1)

끝의 빈 문자열도 포함해서 전부 자름

-1이 인자로 들어가는 이유

예시:

String s = "a,b,,";
s.split(",");       // 결과: ["a", "b"]
s.split(",", -1);   // 결과: ["a", "b", "", ""] ✅

→ 기본 split()은 맨 뒤의 빈 문자열은 제거해버린다.
→ 그래서 -1을 넣으면 빈 문자열까지도 빠짐없이 포함시켜준다.

오답

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;
    }
}

image.png

처음에는 split("x")로 매개변수 하나짜리 메서드를 써서 코드를 작성했기 때문에 마지막 공백값이 카운트 안 되서 실행결과와 기댓값이 다르게 나왔다. 맨 끝 "x" 뒤에 빈 문자열 "" 하나가 있어야 하는데 split()은 기본적으로 마지막 빈 문자열을 제거해버려서 그래서 기대했던 6개 대신 5개가 나오는 것이다.

split()에 두 번째 인자로 -1을 넣으면 빈 문자열도 포함해서 자른다. 매개변수 2개짜리 코드로 수정해주었다.

String[] str = myString.split("x", -1);