코딩테스트

프로그래머스(JAVA) - level2(JadenCase 문자열 만들기 )

yeosang0508 2025. 1. 12. 23:44

문제정리

주어지는 s는 알파벳과 숫자, 공백문자로 이루어짐
모든 단어의 첫 문자 대문자, 나머지 소문자인 문자열
첫문자가 알파벳이 아닌 경우에는 이어진 알파벳 소문자로
숫자는 단어의 첫 문자로만 나온다. 공백문자 연속해서 나올 수 있다.

 

→ 문제 해결하는 과정에서 공백문자 연속해서 나올 수도 있다는 점.. 생각을 못함..

내가 작성한 코드

class Solution {
    public String solution(String s) {

        String[] str = s.split(" ");

        String answer = "";

        for(int i = 0; i < str.length; i++){
            String[] word = str[i].split("");

            String a = word[0].toUpperCase();

            for(int j = 1; j < word.length; j++){
                a += word[j].toLowerCase();
            }

            answer += a + " ";
        }

        answer = answer.trim();

        return answer;
    }
}

 

처음에는 위와 같이 코드를 짰는데 계속

 

처럼 테스트8만 실패라고 뜸... 계속 조금씩 수정해도 똑같은 결과가 나오고...

생각을 해보니 문자열 뒤에도 공백이 올 수도 있다는 걸.. 이 부분을 잊고 trim을 사용해서 다 없애버린것.. 아냐 이건 문제니깐.. 문제에서도 그런말을 없었잖아...ㅜㅜ 하긴... 오지 않는다는 말 없었으니깐.. 이래서 문제를 더 풀어보고 생각해봐야하는 것..

수정한 코드

class Solution {
    public String solution(String s) {

        String[] str = s.split(" ");

        String answer = "";

        for (int i = 0; i < str.length; i++) {
            String[] word = str[i].split("");

            if (str[i].equals(" ")) {
                answer += " ";
                continue;
            }

            String a = word[0].toUpperCase();

            for (int j = 1; j < word.length; j++) {
                a += word[j].toLowerCase();
            }

            answer += a + " ";
        }

        if(s.substring(s.length()-1, s.length()).equals(" ")){
            return answer;
        }

        return answer.substring(0, answer.length()-1);
    }
}

 

코드를 줄이려면 줄일 수 있을거같긴한데.. 음.. 일단 return 값을 substring으로 사용해서 문자열 마지막 length가 공백이면 answer값을 리턴

아닌 경우 answer 값 자체가 현재 s문자열(공백) 이런식으로 공백이 없어야하는데 있는 상태이니깐 원래 trim으로 풀었던걸 substring 0에서 문자열 길이 - 1로 해서 return

시간은 40분...

 

좀 더 생각을 깊이 했으면 좀 더 빠른 시간내로 풀 수 있었을 텐데 아쉽다