Solution 1) 내 풀이
class Solution {
    public int[] solution(String myString) {
        String[] strArray = myString.split("x", myString.length());
        
        int[] answer = new int[strArray.length];
        for (int i = 0; i < strArray.length; i++) {
            answer[i] = strArray[i].length();
        }
        return answer;
    }
}

 

코드 및 문제 리뷰

문자열을 x를 구분자로 나누었을 때의 각 요소들의 길이를 배열로 반환하는 문제이다.

처음엔 그냥 split을 x로 두면 되겠네 하고 생각했다. 그치만 "oxooxoxxox" 문자열을 x로 나누면, ["o", "oo", "o", "", "o", ""] 이렇게 가장 뒤에도 공백자가 하나 온다고 한다.

난 아무리 나눠봐도 가장뒤의 공백자 없이 배열의 길이가 5로 나왔다.( 공백자 있으면 6)

구글링... myString.split("x", myString.length());

 

이렇게 split 메서드의 두번째 매개변수로 limit(길이제한)을 둘 수 있었다.

myString의 길이는 10칸이다. 근데 왜 5칸의 구분자로 나뉘어진 문자열 배열과 나머지 5칸의 공백자가 생기는 게 아닌건가 ? 

알고보니 limit는 정말 말 그대로 limit, 그러니 구분자로 나누어진 문자열이 10개가 넘어가면 10개까지만 표기해주기 위함이었고, 대신 5칸 이상(두번째 매개변수 없이 구분자로만 나누었을 때의 크기)의 limit를 두었을 때엔 myString의 가장 끝에 구분자("x")가 있었음을 알려주기 위해 공백문자 한개가 추가 되는 것이었다.

 

처음에 이해하는게 조금 헷갈렸지만 의구심 갖을 필요 없이 그냥 이게 split 메서드의 표준동작이라고 하니 그런줄 알고 있어야겠다.

 

split만 처리 됐다면 어려울 것 없이 해당 길이의 배열 생성 후 반복문으로 배열의 길이만큼을 각 요소에 할당 시킨 뒤 반환하여 마무리 했다.

 

(다시 한번 상기)

split의 두번째 매개변수는 구분자로 나누어지는 개수에 제한을 두기 위함도 있지만, 

가장 뒤에 공백자 하나가 추가 되어 문자열의 가장 끝에 구분자가 존재했었음을 알려주기 위함도 있다.

+ Recent posts