119. x 사이의 개수

박은서's avatar
Apr 02, 2026
119. x 사이의 개수
2026.04.02(THU)_119일차

코딩 테스트

1. 문제

문제 설명

문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

제한사항

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

입출력 예

myString
result
"oxooxoxxox"
[1, 2, 1, 0, 1, 0]
"xabcxdefxghi"
[0, 3, 3, 3]

입출력 예 설명

입출력 예 #1
  • "x"를 기준으로 문자열을 나누면 ["o", "oo", "o", "", "o", ""]가 됩니다. 각각의 길이로 배열을 만들면 [1, 2, 1, 0, 1, 0]입니다. 따라서 [1, 2, 1, 0, 1, 0]을 return 합니다.
입출력 예 #2
  • "x"를 기준으로 문자열을 나누면 ["", "abc", "def", "ghi"]가 됩니다. 각각의 길이로 배열을 만들면 [0, 3, 3, 3]입니다. 따라서 [0, 3, 3, 3]을 return 합니다.

2. 풀이

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

3. 다른 사람의 풀이

import java.util.Arrays; class Solution { public int[] solution(String myString) { return Arrays.stream(myString.split("x", myString.length())) .mapToInt(x -> x.length()) .toArray(); } }

📌 Java String.split() 두 번째 인자(limit) 완전 정리

1️⃣ split() 기본 구조

String[] result = 문자열.split(구분자, limit);
요소
의미
구분자
나눌 기준 (정규식)
limit
결과 배열의 개수 및 처리 방식 제어
➡️ limit은 “몇 개로 나누느냐”가 아니라 “어디까지 유지하느냐”를 결정한다

2️⃣ limit 값에 따른 동작

1) limit > 0 (양수)

  • 결과 배열의 최대 길이를 제한
String str = "a,b,c,d"; str.split(",", 2);
⬇️ 결과
["a", "b,c,d"]
  • 특징
    • 배열 길이 = 최대 limit
    • 마지막 요소에 나머지 문자열 몰아서 들어감

2) limit = 0 (기본값)

String str = "a,b,c,d"; str.split(",");
➡️ 내부적으로는 split(",", 0)과 동일
⬇️ 결과
["a", "b", "c", "d"]
  • 특징
    • 정상적으로 나누지만
    • 뒤쪽(empty 문자열)은 제거됨

3) limit < 0 (음수)

String str = "a,b,c,d,"; str.split(",", -1);
⬇️ 결과
["a", "b", "c", "d", ""]
➡️ 빈 값 처리

3️⃣ 가장 중요한 차이 (실전 핵심)

예제

String str = "a,b,c,,";

1) 기본 (limit = 0)

str.split(",");
⬇️ 결과
["a", "b", "c"]
⚠️ 뒤쪽 빈 값 제거됨

2) limit = -1

str.split(",", -1);
⬇️ 결과
["a", "b", "c", "", ""]
⚠️ 빈 값까지 전부 유지 (중요)

4️⃣ 동작 요약 (시험용 핵심 표)

limit 값
동작
> 0
결과 개수 제한
= 0
기본값, 뒤쪽 빈 문자열 제거
< 0
모든 결과 유지 (빈 문자열 포함)

5️⃣ 언제 무엇을 써야 하냐

1) 일반적인 문자열 분리

split(",")

2) CSV / 데이터 파싱 / 정확한 구조 유지

split(",", -1)
⚠️ 필수 (빈 값도 데이터이기 때문)

3) 앞부분만 자르고 나머지 유지

split(",", 2)
⚠️ 로그 파싱 / prefix 분리할 때 사용

6️⃣ 자주 틀리는 포인트

❌ 착각 1

split하면 빈 문자열도 다 나온다
→ 틀림
→ 기본은 뒤쪽 empty 제거

❌ 착각 2

limit은 단순 개수 제한이다
→ 반만 맞음
→ 실제 핵심은 "나누는 방식 제어"

❌ 착각 3

구분자는 그냥 문자다
→ 틀림
정규식이다
str.split("."); // ❌ 모든 문자 분리됨 str.split("\\."); // ⭕ 점 기준 분리

7️⃣ 한 줄 정리

➡️ split() 두 번째 인자(limit)는 "결과 개수 + 빈 문자열 유지 여부"를 동시에 제어하는 옵션

8️⃣ 실전 기억 포인트 (중요)

  • 데이터 정확히 유지 → 1
  • 기본 사용 → 0 (생략)
  • 앞부분만 자르기 → 양수
Share article