문제설명
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를 사용하여 직접 문자열을 조합한 것이 더 효율적임
- 단어 뒤에 직접 " "(공백)를 추가하여 원래 공백 개수를 유지.

반응형
    
    
    
  'Chapter02 > 코딩테스트' 카테고리의 다른 글
| [ 코딩테스트 ] 프로그래머스 Lv2. 짝지어 제거하기 (0) | 2025.03.05 | 
|---|---|
| [ 코딩테스트 ] 프로그래머스 Lv2.올바른 괄호 (1) | 2025.03.02 | 
| [ 고딩데스드 ] 프로그래머스 Lv2.최솟값만들기 (0) | 2025.02.28 | 
| [ 고딩데스드 ] 프로그래머스 Lv2.최댓값과 최솟값 (2) | 2025.02.27 | 
| [ 고딩데스드 ] 서울에서 김서방 찾기 (0) | 2024.10.08 |