본문 바로가기

알고리즘/프로그래머스

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

반응형

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는 알파벳과 공백문자(" ")로 이루어져 있습니다.
  • 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

입출력 예

sreturn

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

 

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ");
		StringBuffer sb = new StringBuffer();
		for(int i=0; i<arr.length; i++) {
			sb.append(arr[i].substring(0, 1).toUpperCase());
			sb.append(arr[i].substring(1).toLowerCase());
			if(i != arr.length-1) sb.append(" ");
		}	
		return sb.toString();
    }
}

 

처음에 이렇게 짰지만 테스트 케이스들을 거의 통과하지 못했다. 그래서 질문하기 내용들을 보니 공백이 하나가 아닐 수 있다는 글이 있었고 그래서 split으로 자르지 않고 문자열 통채로 반복문을 돌려야 겠다고 생각했다.

그래서 수정한 코드가 아래 코드이다.

 

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

일단 문자열의 시작은 무조건 대문자로 들어가게 되므로 answer를 s의 첫글자로 초기화 해주었다.

그리고 temp변수를 사용했는데 temp는 그 전 문자가 공백이었는지 문자였는지 검사하기 위해 사용했다.

boolean을 사용했어도 됬는데 아무 생각없이 int로 0, -1을 사용한것 같다.

 

그래서 그 전 문자가 공백 (temp = -1) 이었는데 다음에 문자가 오게 되면 toUpperCase 메소드를 사용하여 대문자를 더해주고 그 외에는 공백이 연속으로 오던지 문자가 연속으로 있는 경우이거나 문자에서 공백으로 바뀌는 경우로 toLowerCase 메소드를 사용하여 소문자로 바꿔서 더해주었다.

반응형