Jaden Case

최준호·2021년 11월 5일
0

알고리즘 강의

목록 보기
78/79

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
s는 길이 1 이상인 문자열입니다.
s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

"3people unFollowed me" => "3people Unfollowed Me"
"for the last week" => "For The Last Week"

코드

public class JadenCase {
    public static void main(String[] args) {
        String str = "3people unFollowed me";
        String solution = solution(str);
        System.out.println("solution = " + solution);
    }
    public static String solution(String s){
        StringBuilder sb = new StringBuilder();
        s = s.toLowerCase();
        char[] chars = s.toCharArray();
        int cnt = 0;
        for(char c : chars){
            if(c == ' '){
                cnt = 0;
                sb.append(' ');
                continue;
            }
            if(cnt == 0){
                sb.append(String.valueOf(c).toUpperCase());
                cnt++;
            }else{
                sb.append(c);
            }
        }

        return sb.toString();
    }
}

설명

프로그래머스 문제로 예전에 풀었던 형식인데 다시 갑자기 풀려고 하니 생각이 나지 않았다.

그래서 처음 시도 했던 방식은 " "를 기준으로 split하여 가장 앞의 문자만 대문자로 취환하여 다시 붙여 반환하는 방식이였는데 이는 런타임 오류가 났다... 그 이유는 반복문 안에서 다시 치환을 하기 위해 첫번째 문자열을 찾고 그 문자열을 치환한 후 다시 문자열에 붙이는 코드 때문인거 같다.

그래서 두번째 방식은 char 배열을 만들어 해당 배열을 돌며 cnt값을 기준으로 0일때 해당 문자를 대문자로 치환하는 방식을 사용하였다. 지금 보니 cnt말고 boolean 값으로 true false로 하였다면 더 깔끔했을거 같다.

마지막으로 반환할때 sb.toString()이 아닌 sb.toString().trim()으로 반환했는데 테스트 케이스에 마지막에 공백이 들어가는 테스트가 있었는지 테스트 케이스에서 실패를 하더라... 실행 시간은 엄청 짧았는데. 그래서 trim을 빼니 통과했다!

다음부터는 문제를 풀때 느낀점 보다 문제를 풀어낸 방식을 코드와 함께 정리하는게 나을거 같다!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글