ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] JadenCase Java 풀이
    문제풀이/프로그래머스 2022. 2. 23. 00:20
    반응형

    이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.

    틀리거나 잘못된 정보가 있을 수 있습니다.

    댓글로 알려주시면 수정하도록 하겠습니다.


    1. 문제

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

    2. 입력

    • s는 길이 1 이상 200 이하인 문자열입니다.
    • s는 알파벳과 숫자, 공백 문자(" ")로 이루어져 있습니다.
      • 숫자는 단어의 첫 문자로만 나옵니다.
      • 숫자로만 이루어진 단어는 없습니다.
      • 공백 문자가 연속해서 나올 수 있습니다.
    • 첫 문자가 영문이 아닐 때에는 이어지는 영문은 소문자로 씁니다. ( 첫 번째 입출력 예 참고 )

    3. 예제

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

    4. 풀이

    이번 문제는 문자열에 포함된 단어들 중 가장 첫 알파벳만 대문자로 변경하여 문자열을 완성시키는 것이 이번 문제의 목표입니다.

     

    먼저 입력으로 주어진 문자열은 공백 문자를 기준으로 단어들이 연결되어 있는 형태입니다. 그러므로 단어들의 첫 단어를 대문자로 만들기 위해서는 문자열을 공백을 기준으로 분리할 필요가 있습니다.

     

    먼저 문자열을 단어들로 분리하기 위해 split함수를 이용하여 여러 단어들의 배열로 분리를 수행합니다.

    이제 분리된 단어 배열을 순회하면서 단어들을 JadenCase로 변경을 진행하면 됩니다.

     

    그런데 여기서 문제에서 제시한 공백 문자열이 연속하여 있는 경우가 있다고 하였습니다. 이 경우 연속된 공백 문자를 분리하면 empty 문자열이 배열에 포함되게 됩니다.

     

    위 그림처럼 보라색과 빨간색이 공백 문자입니다. 2개의 공백 문자가 연속되는 경우 split을 진행 시 empty 문자열이 2개가 배열에 포함되게 됩니다.

     

    이제 단어 배열을 순회할 때 공백 문자가 연속되어 있는 경우의 수를 포함하여 JadenCase를 만들도록 조건문을 추가합니다.

     

    조건은 empty 문자열의 경우 공백 문자열을 정답 문자열에 추가하고 만약 empty 문자열이 아닌 경우 JadenCase를 만드는 작업을 수행하도록 조건문을 작성합니다.

     

    이제 JadenCase를 만드는 방법을 알아보도록 하겠습니다.

     

    분리된 단어의 경우 중간에 대문자가 있는 경우가 있습니다. 예시처럼 'unFollowed'와 같은 경우입니다.

     

    이경우 가장 앞 알파벳인 u를 대문자로 만들고 나머지는 모두 소문자로 만들어야 합니다.

     

    그러므로 분리된 단어는 모두 소문자로 만든 뒤 가장 앞 알파벳만 대문자로 변경을 하면 JadenCase를 만들 수 있습니다.

     

    그러므로 단어를 toLowerCase를 이용하여 소문자로 모두 변경 후 첫 알파벳을 추출하여 해당 알파벳을 toUpperCase를 이용하여 대문자로 변경합니다.

     

    이제 만들어진 JadenCase 단어를 정답 문자열에 추가합니다. 그리고 단어와 단어 사이에는 공백 문자가 무조건 포함되므로 공백 문자를 추가합니다.

     

    이제 JadenCase의 문자열로 만드는 작업은 모두 끝이 났습니다. 그러나 아직 정답이 된 것은 아닙니다. 마지막 한 단계가 남았습니다.

     

    완성된 정답 문자열의 경우 마지막 단어가 empty 문자열인 경우는 마지막이 공백이 맞습니다.

     

    그러나 마지막 단어가 일반 단어인 경우는 공백 문자가 필요 없지만 위 단어와 단어 사이의 공백 추가로 추가되어 있습니다.

     

    그러므로 마지막 단어가 empty 문자열이 아닌 경우 마지막 공백 문자를 제거하여 정답을 완성시키면 문제를 풀 수 있습니다.

     

    5. 코드

    전체 코드는 Git에 있습니다.

    public String solution(String s) {
    	StringBuilder answer = new StringBuilder();
    
    	String[] word = s.split(" ");
    
    	for (String value : word) {
    		if(value.equals(""))
    			answer.append(" ");
    		else
    			answer.append(jadenCase(value)).append(" ");
    	}
    
    	if(s.charAt(s.length()-1) == ' ')
    		return answer.substring(0, answer.length());
    
    	return answer.substring(0, answer.length()-1);
    }
    
    public String jadenCase(String str){
    	StringBuilder jaden = new StringBuilder();
    
    	str = str.toLowerCase();
    	String sub = str.substring(0, 1);
    
    	jaden.append(sub.toUpperCase());
    	jaden.append(str.substring(1));
    
    	return jaden.toString();
    }
    반응형

    댓글

Designed by Tistory.