본문 바로가기

알고리즘

[프로그래머스] JadenCase [JAVA]

반응형

출처 : 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

풀이 & 사용 메소드

  • 한 문장내에서 첫 글자는 대문자로, 나머지는 소문자로 바꿔주기
  • toUpperCase, toLowerCase. split 
  • 1. 공백을 기준으로 분리하지말고, 공백도 문자로 봤어야 했다.
  • 2. 전 문자가 공백이라면, 그 다음첫 글자는 대문자로 바꿔줘야 한다.

주의 할점

  • 공백이 여러 개 올 수 있다는 것을 생각하지 못하니, 런타임 에러가 계속 발생했다.
  • 입력 문자열 가장 끝에 공백이 올 수도 있다는 것도 생각했어야 했다. ㅠㅠㅠ 시간 매우 소비함.

실패한 코드

public static String failsolution (String s ) {
		String answer =""	;
		
		StringBuilder sb = new StringBuilder();
		
		// 1. s를 공백을 단위로 쪼개자.
		String[] JadenCase = s.split(" ");
		// 2. 각 배열의 첫 글자를 대문자로 바꾸자. + 나머지는 소문자로 
		for( int i=0; i<JadenCase.length; i++) {
			
			sb.append(Character.toUpperCase(JadenCase[i].charAt(0)));
			for( int j=1; j<JadenCase[i].length(); j++) {
				sb.append(Character.toLowerCase(JadenCase[i].charAt(j)));
				
			}
			
			// 3. StringBuilder에 더해주고 
			if ( i == JadenCase.length-1) break ;
			sb.append(' '); // 공백 넣어주고
		}
		
		// 4. toString 메소드 이용해보자
		answer = sb.toString();
		
		return answer;	
	}

성공한 코드

public static String solution (String s ) {
			String answer =""	;
			String[] arr = s.toLowerCase().split(""); // 공백도 문자취급해주기
			StringBuilder sb = new StringBuilder();
			
			boolean blank = true; // 첫 글자는 무조건 대문자니까.
			
			for ( String str : arr) {
				answer += blank? str.toUpperCase() : str;
				blank = str.equals(" ")? true : false;
				
			}
			
			
			return answer;	
		}

추가적으로 참고한 코드

public class Solution {
  public String solution(String s) {
    StringBuilder answer = new StringBuilder(); // 문자열을 더하기 때문에 StringBuilder 사용

    String firstStr = s.charAt(0) + "";
    answer.append(firstStr.toUpperCase()); // 첫 글자는 무조건 대문자

    for (int i = 1; i < s.length(); i++) {
      String now = s.charAt(i) + "";
      if (now.equals(' ')) { // 공백이면 그대로 넘어가기
        answer.append(" ");
      } else if (s.charAt(i - 1) == ' ') { // 전 문자열이 공백이면
        answer.append(now.toUpperCase()); // 대문자
      } else {
        answer.append(now.toLowerCase()); // 소문자
      }
    }

    return answer.toString();
  }

 

반응형