Algorithm/프로그래머스

프로그래머스_JadenCase 문자열 만들기(JAVA)

류진주 2021. 7. 14. 14:42

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

 

코딩테스트 연습 - JadenCase 문자열 만들기

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

programmers.co.kr

문제 설명

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

제한 조건

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

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

[문제 분석]

공백을 기준으로 문자열 s를 split하여 풀었더니 공백이 연속으로 두개가 있는 경우나 문장 마지막에 공백이 있는 경우 등을 고려하지 못하여 제대로 해결할 수 없었다. 그래서 문자열 s를 구성하는 문자를 반복문을 이용해 앞에서부터 차례로 검사하여 단어의 첫 문자이면 대문자로 변경하여주는 작업을 하였다.

 

 

[풀이]

1. 문장을 구성하는 단어 중 첫 문자인 경우 대문자로 변경하는 경우만 고려하고 그렇지 않은 문자는 소문자로 변경해주어야 하는데, 뒤의 작업을 생략하기 위해 s를 구성하는 모든 문자를 toLowerCase()를 이용하여 소문자로 변경시켜준다.

2. 문자열 s의 첫번째 문자가 소문자라면, 대문자로 변경시켜준다.

3. 두번째 문자부터 마지막 문자까지 검사하는 작업을 거친다.

   3-1. 해당 위치의 문자가 공백(' ')이고, 그 다음 위치의 문자가 공백(' ')이 아니라면 하나의 단어가 시작되는 것이므로 해당 위치의 문자를 대문자로 변경하여 주고 그 이외의 문자는 이어붙인다.

   3-2. 해당 위치의 문자가 공백(' ')이고, 그 다음 문자 또한 공백(' ')이라면 연속된 공백이 존재하고 새로운 단어가 시작되는 것이 아니므로, 별도의 변경 작업은 거치지 않는다.

 

 

[코드]

class Solution {
    public String solution(String s) {
        String answer = s.toLowerCase();
       
        if('a'<=answer.charAt(0)&&'z'>=answer.charAt(0))
            answer = answer.substring(0,1).toUpperCase()+answer.substring(1);
                
        for(int i=1;i<s.length()-1;i++){
            
            if(answer.charAt(i)==' '){
                if(answer.charAt(i+1)!=' '){
                    answer = answer.substring(0,i+1)+answer.substring(i+1,i+2).toUpperCase()+answer.substring(i+2);
                }
            }
            
        }
        return answer;
    }
}