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