inblog logo
|
DailyCoding
    CodingTestJava

    119. x 사이의 개수

    박은서's avatar
    박은서
    Apr 02, 2026
    119. x 사이의 개수
    Contents
    코딩 테스트1. 문제2. 풀이3. 다른 사람의 풀이📌 Java String.split() 두 번째 인자(limit) 완전 정리1️⃣ split() 기본 구조2️⃣ limit 값에 따른 동작3️⃣ 가장 중요한 차이 (실전 핵심)4️⃣ 동작 요약 (시험용 핵심 표)5️⃣ 언제 무엇을 써야 하냐6️⃣ 자주 틀리는 포인트7️⃣ 한 줄 정리8️⃣ 실전 기억 포인트 (중요)
    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
    Contents
    코딩 테스트1. 문제2. 풀이3. 다른 사람의 풀이📌 Java String.split() 두 번째 인자(limit) 완전 정리1️⃣ split() 기본 구조2️⃣ limit 값에 따른 동작3️⃣ 가장 중요한 차이 (실전 핵심)4️⃣ 동작 요약 (시험용 핵심 표)5️⃣ 언제 무엇을 써야 하냐6️⃣ 자주 틀리는 포인트7️⃣ 한 줄 정리8️⃣ 실전 기억 포인트 (중요)

    DailyCoding

    RSS·Powered by Inblog