본문 바로가기
문제풀이/Programmers 문제풀이

[ 알고리즘 ] 코딩 - Programmers - JadenCase.java

by 마늘아빠 2021. 1. 26.
728x90
반응형

문제 링크

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

 

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

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

programmers.co.kr


* 프로그래머스 - Level2 - (자바)JadenCase

- 온갖 문자열 다루기 / toUpperCase() / toLowerCase()

SubString() / StringBuilder() / replace()

제한사항
입출력 예시

 


< 로직 >

* 처음에는 StringTokenizer를 이용해서 공백을 기준으로 잘라낸 다음에 문자열 처리를 하면 된다고 생각을 했다.

* 하지만 문제는 치사했고....

* 입출력 예시처럼 예쁜 케이스는 거의 없다시피 한 것 같다.

* 앞 뒤로 공백이 들어간 경우

* 중간에 연속된 공백이 들어간 경우

* 모두 다 남겨서 아래와 같은 형식으로 마지막에 다 출력 해 주어야한다.

예시

* StringTokenizer는 공백을 싸그리 날려버리기 때문에

* 일반적인 String의 split() 함수를 이용했다.

* 그럼에도 문자열의 마지막 공백은 다 날아가기 때문에 추가적인 공백 추가가 필요하다.


 

class Solution {
		public String solution(String s) {
			StringBuilder sb = new StringBuilder();
	    	String[] strArray = s.split(" "); // " " 공백을 기준으로 split
	    	
	    	for(int i = 0; i < strArray.length; i++) {
	    		String tmp = strArray[i];
	    		if(!tmp.equals("")) { // 해당 문자열이 공백이 아니라면
		    		if('a' <= tmp.charAt(0) && tmp.charAt(0) <= 'z' || // 소문자 - 대문자인 경우
		    		   'A' <= tmp.charAt(0) && tmp.charAt(0) <= 'Z') {
		    			String first = tmp.substring(0,1).toUpperCase();
		    			String remain = tmp.substring(1, tmp.length()).toLowerCase();
		    			sb.append(first + remain);
		    		}else { // 숫자인 경우
		    			sb.append(tmp.toLowerCase());
		    		}
		    		sb.append(" "); // 공백 하나 추가
	    		} else { // 공백이면 공백 그대로 출력
	    			sb.append(" ");
	    		}
	    	}
	    	
	    	sb.replace(sb.length()-1, sb.length(), ""); // 문자로 끝이 났다면 공백 하나가 있다. 제거
	    	
	    	// 마지막에 공백인 경우도 추가해 주어야 한다.
	    	for(int i = s.length()-1; i >= 0; i--) {
	    		if(s.charAt(i) == ' ') {
	    			sb.append(s.charAt(i));
	    		} else break;
	    	}
	    	
	        String answer = sb.toString();
	        return answer;
		}
반응형