자바 알고리즘

[알고리즘] 프로그래머스 - JadenCase 문자열 만들기

Big Iron 2023. 4. 30. 17:11

1. 조건




2. 내 생각


문자열을 공백 기준으로 나눈 다음 반복문을 통해 첫 번째 글자를 대문자로 변경하여 출력하면 될 것 같았다.

3. 실행 결과


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

        for(String la : lowArr) {
            String first = la.substring(0, 1).toUpperCase();
            String second = la.substring(1, la.length());
            answer += first + second + " ";
        }

        System.out.println("answer = " + answer);
        return answer;
    }
}

image

위 이미지를 보면 알겠지만 문자열은 제대로 나오는데 마지막에 공백이 존재해 틀린 답이었다.

image

맨 뒤의 공백을 지우고자 return을 answer.trim()으로 변경하여 채점한 결과 런타임 에러가 발생했다.

4. 개선 결과


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

        for(String la : lowArr) {
            if(la.length() == 0) {
                answer += " ";
            } else {
                answer += la.substring(0, 1).toUpperCase();
                answer += la.substring(1).toLowerCase();
                answer += " ";
            }
        }
        return answer.trim();
    }
}

조금 더 분명하게 첫 글자를 대문자로 변환하고자 변수를 만들었지만 first와 second라는 변수를 새롭게 선언하는 과정에서 시간이 더 걸린다고 생각했다. 시간을 줄이기 위해 빈 문자열 answer에 각각 첫 대문자와 이후의 소문자를 더해주었고 각각의 단어마다 뒤에 공백을 추가해 구분하였다.

image


위 사진과 같이 런타임 에러는 해결한 듯 하지만 한 케이스를 통과하지 못했고

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

입력받은 문자열 s의 마지막 값이 공백인지 확인하는 코드를 추가해 해결할 수 있었다.