조급하면 모래성이 될뿐

[프로그래머스] JadenCase문자열 만들기 본문

Algorithm/Programmers

[프로그래머스] JadenCase문자열 만들기

Pawer0223 2020. 1. 20. 21:19

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12951?language=java

 

코딩테스트 연습 - JadenCase 문자열 만들기 | 프로그래머스

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 1 이상인 문자열입니다. s는 알파벳과 공백문자(" ")로 이루어져 있습니다. 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 ) 입출력 예 s return 3people unFollo

programmers.co.kr

나의 풀이

1. 띄어쓰기(" ")단위로 split하여 배열에 담는다.

2. 단어들을 순서대로 처리한다.

3. 먼저 단어를 모두 소문자로 변경.

4. 첫글자가 알파벳인 경우에만 대문자로 변경.

5. 공백이 연속해서 나올 수 있다. " "단위로 split하였으니, 마지막에 공백이나오는 조건을 처리해주자.

ex) "aaa bbb "의 경우 "Aaa Bbb "가 되야한다, " a "의 경우 " A "가 되야한다.

코드

package Programmers.Level2;

import java.util.Arrays;

public class MakeJadenCase {

	public static void main(String[] args) {

		String s = "ab a ";

		String answer = solution(s);

		System.out.println(answer);

	}

	public static String solution(String s) {
		
		// 1. " "단위로 나눈다.
		String[] words = s.split(" ");

		StringBuilder sb = new StringBuilder();

		// 2. 첫글자가 숫자이면 대문자로 변경하지 않는다.
		// 3. 나머지는 첫글자만 대문자로 변경한다.
		for ( int i = 0 ; i < words.length; i ++ ) {
			String word = words[i];

			if ( word.equals("") ) word = "";
			else {
				
				word = word.toLowerCase();
				
				int ascii_num = word.charAt(0) ;	    			 

				// 영문자인경우는 첫글자 대문자 + 나머지 소문자 하면 됨
				if ( (ascii_num >= 'a' && ascii_num <= 'z') ) {
					word = String.valueOf(word.charAt(0)).toUpperCase()+word.substring(1,word.length());
				}
			}
			
			sb.append(word);
			if( i != words.length-1 ) sb.append(" ");
		}
		
		if(s.charAt(s.length()-1)==' ') sb.append(" ");
		
		return sb.toString();
	}
	
	public static String solution2(String s) {
		String answer ="" ;
		
		String[] sS = s.toLowerCase().split("");
		
		// " "인경우 true이다.
		boolean flag = true;
		
		for ( String word : sS ) {
			answer += flag ? word.toUpperCase() : word;
			flag = word.equals(" ") ? true : false; 
		}
		
		return answer;
	}

}

제출 결과

후기

내 풀이로 정답처리는하였지만, 훨씬 간단하게 구현한 다른사람의 풀이를 참조하였다.

 

1. 입력문자열 s를 모두 소문자로 변경해준다.

2. ""로 split하여 모든글자 하나하나를 처리한다.

3. " "를 만나는 경우에는 flag값을 true로 변경해준다. 이 경우는 다음글자가 Upper되어야하는 경우이다.

4. 이러면 공백이 아무리많거나, 첫글자가 영어가 아니더라도 모든 조건을 만족하게 된다....

반응형

'Algorithm > Programmers' 카테고리의 다른 글

[프로그래머스] 튜플  (0) 2020.04.03
[프로그래머스] 괄호변환  (0) 2020.04.01
[프로그래머스]행렬의 곱셈  (0) 2020.01.07
[프로그래머스] 캐시  (0) 2020.01.05
[프로그래머스]숫자의 표현  (0) 2020.01.04