알고리즘/프로그래머스

[프로그래머스] JadenCase 문자열 만들기(Java) 풀이 및 해설

승민아 2025. 1. 25. 22:16

https://school.programmers.co.kr/learn/courses/30/lessons/12951#

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 풀이

문자열을 돌며 다음 조건문을 만들어 체크한다.

 

"대문자인 경우"

1. 대문자가 그대로 오는 경우 - 앞 문자가 공백이거나 문자열의 시작 위치인 인덱스 0이라면.

2. 소문자로 변환해야하는 경우 - 앞 문자가 공백이 아닌경우

 

"소문자인데 대문자로 변환해야하는 경우"

1. 소문자인데 문자열 시작 위치 인덱스 0 이거나 앞에 공백인 경우

 

"그 외 문자 그대로 출력"

 

테스트 케이스 8번이 틀리는 경우 다음 경우를 생각해보자.

공백의 문자가 연속으로 나오는 경우가 존재한다.

 

공백이 3개인 "   " 입력의 경우 빈문자열이 아닌 "   " 공백 3개가 포함된 문자열을 반환해야한다.

 

전체 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        
        // "  " -> "  "
        for(int i=0; i<s.length(); i++) {
            if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') { // 대문자인 경우
                if (i == 0 || s.charAt(i-1) == ' ') { // 대문자가 그대로 와도 되는 경우 - 앞 문자가 공백이거나 인덱스 0인 경우
                    answer += s.charAt(i);
                } else if (s.charAt(i-1) != ' ') { // 소문자로 와야하는 경우 - 앞에 공백이 아닌 경우
                    answer += (char)(s.charAt(i) - 'A' + 'a');
                }
            } else if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z' && ( i == 0 || s.charAt(i-1) == ' ')) {
                // 소문자인데 앞의 문자가 공백이거나 첫문자라면 대문자로 변환
                    answer += (char)(s.charAt(i) - 'a' + 'A');
            } else { // 그 외에는 문자 그대로 
                answer += s.charAt(i);
            }
        }
        
        
        return answer;
    }
}