알고리즘 문제 연습

[프로그래머스] JadenCase 문자열

codi-3 2024. 10. 7. 20:20

🔍 문제


📊 분석

  • 문장의 첫 글자는 대문자 그리고 나머지는 소문자.
  • 공백 이후 첫 글자는 대문자 그리고 나머지는 소문자.
  • 만약 문장이 공백으로 끝난다면 공백을 살려서 return.

✏️ 풀이

 

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] tmp = s.split(" ");
        
        for(int i = 0; i < tmp.length; i++){
            
            if(tmp[i].length() == 0){
                answer+= " ";
            }
            
            answer += tmp[i].substring(0,1).toUpperCase()+ tmp[i].substring(1).toLowerCase()+" ";
   
        }
        if(s.substring(s.length()-1, s.length()).equals(" ")) return answer;
        return answer.substring(0, answer.length()-1);
    }
}

 

처음 풀이로 풀었을시 런타임에러가 많이 나와 당황했다. 그리고 실패한 케이스 중 아마 마지막 공백으로 끝나는 문자열을 생각하지 못하고 풀었던 거 같다.

⚒️개선된 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] tmp = s.split(" ");
        
        for(int i = 0; i < tmp.length; i++){
            // 문자열의 길이가 0이라면 공백 추가         
            if(tmp[i].length() == 0){
                answer+= " ";
            }
            else{
                answer += tmp[i].substring(0,1).toUpperCase()+ tmp[i].substring(1).toLowerCase()+" ";
            }
        }
        // 입력 받은 문자열의 맨 마지막이 " " 라면 바로 answer 반환
        if(s.substring(s.length()-1, s.length()).equals(" ")) return answer;
        // 맨 마지막 " " 제거하고 answer 반환
        return answer.substring(0, answer.length()-1);
    }
}

 

혹시 몰라 if문뒤 로직들을 else내부에 적용하니 런타임 안에 해결할 수 있었다. else만으로도 성능차이가 많이 난다는 사실에 놀랐으며 앞으로 문제를 풀이할 때 명심하면 풀어봐야겠다.