[프로그래머스,Level 2] JadenCase 문자열 만들기 (JAVA 구현)
코테/프로그래머스(Programmers)

[프로그래머스,Level 2] JadenCase 문자열 만들기 (JAVA 구현)

반응형

- 첫 풀이 및 정답풀이

  이 문제를 접근하는 방식에 대해서는 제대로 접근하였지만, 고려하지 못한 부분으로 인해 시간이 좀 걸렸다. 우선 이 문제는 프로그래머스 level 1의 '이상한 문자 만들기' 문제와 유사하게 주어지는 문자열 내부에 공백이 존재하는 경우를 고려해 주어야 한다.

 

  예를 들어 "_A__sdf_fFt_"라는 입력이 주어졌을 때, 출력해야 하는 결과는 "_A__Sdf_Fft_"가 된다. 즉, split() 메서드를 이용해 공백을 구분자로 하여 문자열들을 분리할 때, 공백을 무시하지 않도록 split() 메서드의 limit값을 -1로 주어야 한다. 이렇게 문자열을 분해하면, {_ , A, _, sdf, fFt, _}로 분해가 된다.

 

  이 상태에서 각 요소를 참조했을 때, 공백이라면 공백만을 추가하고 알파벳인 경우는 split의 기준점이 된 공백을 하나 더 추가해주어야 한다.

 

  즉, 0번 인덱스인 공백은 공백, A는 그대로 후 공백, 2번 인덱스 공백 역시 그대로 공백( 앞선 A 이후의 공백으로 공백이 2개), 3번 인덱스는 Sdf 후 공백, 4번 인덱스 역시 Fft 후 공백을 취한다. 5번 인덱스의 경우 4번에 의해 공백이 하나 추가된 상태이기 때문에 5번 인덱스의 공백을 또 넣게 된다면 마지막에 공백이 2개가 되므로, 마지막 인덱스가 공백이라면, 무시하는 별도의 조건이 필요하다.

 

class Solution {
    public String solution(String s) {
        // 1. 문자열 변경이 잦으므로 StringBuilder로 객체 생성.
        StringBuilder answer = new StringBuilder();
        // 2. 주어진 문자열을 소문자로 모두 변경.
        s = s.toLowerCase();
        
        // 3. 공백또한 고려하기 위해 limit를 -1로.
        String[] str = s.split(" ",-1);
        
        // 4. 저장된 문자열 배열 탐색.
        for(int i = 0;i<str.length;i++){
            // 5. 공백인 경우
            if(str[i].length() ==0){
                // 6. 마지막 문자가 공백인 경우는 그냥 무시.
                if(i == str.length-1) continue;
                // 7. 나머지 공백은 공백을 삽입.
                answer.append(" ");
                continue;
            }   
            // 8. 첫 글자가 알파벳인 경우, 첫 글자만 대문자로 만든 뒤 나머지를 붙여준다.
            else if(str[i].charAt(0) >='a' && str[i].charAt(0) <='z'){
                answer.append(str[i].substring(0,1).toUpperCase());
                answer.append(str[i].substring(1,str[i].length()));
            // 9. 첫 글자가 알파벳이 아닌 경우는 그냥 붙인다.
            }else{
                answer.append(str[i]);
            }
            // 10. 마지막 문자를 제외하고 문자를 붙인 뒤 공백을 붙여준다.
            if(i != str.length-1)
                answer.append(" ");
        }
        
        return answer.toString();
    }
}

 

 

반응형