Chapter02/코딩테스트

[ 고딩데스드 ] 프로그래머스 Lv2.JadenCase 문자열 만들기

EmmaDev_v 2025. 3. 1. 08:32

문제설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 
그 외의 알파벳은 소문자인 문자열입니다.
 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
숫자는 단어의 첫 문자로만 나옵니다.
숫자로만 이루어진 단어는 없습니다.
공백문자가 연속해서 나올 수 있습니다.


입출력 예
s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

 

 

나의 풀이

-> 일단 문자열 공백으로 자르고,

첫글자가 문자가 아니면 다 소문자로바꾸고

반대의 경우는 첫글자만 대문자로 나머지는 소문자로 바꿈

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String[] list = s.split(" "); 

        for (int i = 0; i < list.length; i++) {  
            if (!list[i].isEmpty() && Character.isDigit(list[i].charAt(0))) {
                list[i] = list[i].toLowerCase();
            } else if (!list[i].isEmpty()) {
                list[i] = list[i].substring(0, 1).toUpperCase() + list[i].substring(1).toLowerCase();
            }
        }

        return String.join(" ", list);
    }
}

 

 

 

 

 

 

케이스 하나가 실패뜸,, 왜지,, ? ㅠ

 

 

 

지피티한테 물어봤더니 아래처럼 수정해줬다

 

 

class Solution {
    public String solution(String s) {
        String[] words = s.split(" ", -1); 
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < words.length; i++) {
            if (!words[i].isEmpty()) {
                char firstChar = words[i].charAt(0);
    
                if (Character.isLetter(firstChar)) {
                    words[i] = Character.toUpperCase(firstChar) + words[i].substring(1).toLowerCase();
                } else {
                    words[i] = firstChar + words[i].substring(1).toLowerCase();
                }
            }

            result.append(words[i]);
            if (i < words.length - 1) result.append(" ");
        }

        return result.toString();
    }
}

 

 

수정된 것 

 

  • split(" ", -1)을 사용하여 연속된 공백도 유지.
  • String.join()을 호출하여 배열을 다시 문자열로 변환한 것 보다 StringBuilder를 사용하여 직접 문자열을 조합한 것이 더 효율적임
  • 단어 뒤에 직접 " "(공백)를 추가하여 원래 공백 개수를 유지.

 

 

 

 

 

 

 

 

 

반응형