Algorithm

[99클럽 코테 스터디 13일차] 문자열, split()

kimphoby 2025. 4. 16. 16:49

📌 키워드 

  • 문자열 
  • 스플릿 

📌 문제 및 요약 

  • Middler : jaden case 문자열 만들기  

📌 Middler :  JadenCase 문자열 만들기 

문제에서 중요 키워드를 놓치고 split() 함수를 제대로 이해하지 못한 이슈로 조금 헤맸던 문제다. 단어의 첫글자가 대문자로 시작하도록 문자열을 만드는 간단한 문제였는데 "공백이 연속으로 나올 있을 수 있다." 는 문장을 못봤다. 간단 한 문제라서 정리하지 않고 바로 코딩으로 도입했는데 중요 요소를 놓쳤다. 쉬워보여도 입력, 로직, 출력을 제대로 정리하고 들어가야겠구나를 다시한번 느꼈다. 

 

"공백 문자가 연속으로 나올 수 있습니다." => "공백 문자가 문자열의 앞 뒤로 나올 수 있습니다. 공백의 갯수를 유지해주세요"

 

 

처음에는 String.split(" ") 를 사용해서 문제를 해결했다가 연속으로 공백으로 나올 수 있다는 것을 인지하고는 split(" ", -1) 을 사용했다. 

 

✔️ split(" ") vs split(" ", -1)

 

  • split(" ")과 split(" ", -1)은 중간에 공백이 여러 개 있는 경우에는 동일하게 동작합니다. (빈 문자열 포함)
  • 하지만 문자열 끝에 공백이 있을 경우, split(" ")은 빈 문자열을 버리고, split(" ", -1)은 살려줍니다.
  • 그래서, 공백을 정확히 유지해야 하는 경우는 split(" ", -1)을 써야 해요.

 

 

<처음 시도>

split(" ")을 사용해서 문자열의 앞뒤 공백을 무시하는 바람에 실패

import java.util.*;

class Solution {
    public String solution(String s) {
        // 입력 : 길이 1이상 200 이하 문자열, 공백 연속 포함 가능
        StringBuilder answer = new StringBuilder();
        String[] words = s.split(" ");
        
        System.out.println(Arrays.toString(words));
        
        for (String word : words){
            if (word.length() > 0){
                answer.append(word.substring(0,1).toUpperCase());
                answer.append(word.substring(1).toLowerCase());      
            }
            answer.append(" ");
        }
        
        return answer.toString().substring(0,answer.length()-1);
    }
}

<성공>

 

import java.util.*;

class Solution {
    public String solution(String s) {
        // 입력 : 길이 1이상 200 이하 문자열, 공백 연속 포함 가능
        StringBuilder answer = new StringBuilder();
        String[] words = s.split(" ",-1);
        
        System.out.println(Arrays.toString(words));
        
        for (String word : words){
            if (word.length() > 0){
                answer.append(word.substring(0,1).toUpperCase());
                answer.append(word.substring(1).toLowerCase());      
            }
            answer.append(" ");
        }
        
        return answer.toString().substring(0,answer.length()-1);
        
        
        // 출력 : JadenCase로 바꾼 단어들을 공백 포함하여 연결한다. 
    }
}