Algorithm/Programmers

[Lv.2] JadenCase 문자열 만들기 : Java

say! 2026. 1. 28. 17:01
728x90

 

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        boolean first = true;  // 단어인지 확인
        
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            
            // 공백인지 판별하기
            if(c == ' '){
                // 공백인 경우
                sb.append(c);
                first = true;
            }
            else{
                // 공백 아닌 경우
                if(first){
                    // 첫 단어인 경우 > 첫 번째만 대문자
                    sb.append(Character.toUpperCase(c));
                    first = false;
                }
                else{
                    // 나머지 소문자
                    sb.append(Character.toLowerCase(c));
                }
            }   
            
        }   //for문 끝
        return sb.toString();
    }
}

#StringBuilder()

문자열 변경 > 다시 붙여야할 때 StringBuilder() 사용하기

그냥 String은 불변이라 문자열 붙일 때마다 새로운 객체 생성+복사함 > 반복적이면 성능 안좋아짐

StringBuilder는 가변이라 내부 버퍼에서 계속 추가

 

#공백 기준으로 나누면 안되는 이유

제한 조건 '공백문자가 연속해서 나올 수 있음' 때문에 아래와 같이 문제 발생

"  hello world  ".split(" ");
→ ["", "", "hello", "world"]

 

문제 조건에 공백 1개만 존재할 경우에는 아래처럼 split(" ")으로 토큰 분리 가능함

for (String token : s.split(" ")) {
    token = token.substring(0,1).toUpperCase() 
          + token.substring(1).toLowerCase();
}

 

#char, String 문법 차이

char 공백문자 비교할 때는 " "가 아닌 c == ' ' 작은 따옴표 사용해야함