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

1 분 소요

업데이트:

문제

프로그래머스-JadenCase 문자열 만들기
주어진 문자열을 JadenCase로 변경해서 리턴하는 문제
Jaden Case : 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열

  • 제한 사항
    변경 대상 문자열 s : 길이 1 이상
    s는 알파벳과 공백문자(“ “)로 이루어져 있다
    첫 문자가 영문이 아닐 때는 이어지는 영문은 소문자로 쓴다

  • 예시
    “3people unFollowed me” -> “3people Unfollowed Me”
    “for the last week” -> “For The Last Week”

풀이

문자열 s를 한 character씩 반복하며 로직을 수행한다
boolean의 wordStart를 둬서 단어가 시작했는지, 시작하지 않았는지 체크용으로 쓴다
단어 시작했을 때 인덱스를 p에 저장해서 단어가 끝난 후 subString할 때 사용한다

  • 현재 char가 공백이 아니면, 단어가 시작한 상태인지 확인한다
    단어가 시작안했으면, 단어 시작 처리하고 p에 현재 인덱스를 저장한다
    단어가 시작했으면, 넘긴다

  • 현재 char가 공백이면 (Character.isWhitespace(c)), 단어가 시작한 상태인지 확인한다
    단어가 시작 안했으면, 정답에 공백을 추가한다
    단어가 시작했으면, p자리 대문자, p+1~idx 자리 소문자를 추가한다
    단어 시작을 false로 저장하고, 정답에 공백을 추가한다

반복문이 끝난 후 단어 시작상태면 p자리 대문자, p+1~idx 자리 소문자를 추가한다

예시를 들자면, s = “ab c” 인 경우, [‘a’, ‘b’, ‘ ‘, ‘c’] 순으로 반복한다

  • ‘a’
    wordStart=true, p=0 ,answer=””
  • ‘b’
    wordStart=true, p=0 ,answer=””
  • ’ ‘
    wordStart=false, p=0 ,answer=”Ab “
  • ‘c’
    wordStart=true, p=3 ,answer=”Ab “
  • 반복문 끝나고
    wordStart가 true이므로 answer에 추가

=> answer = “Ab c”

  • 생각해 볼 문제
    공백이 가능하다고 했으므로 공백만 주어지면??
    “abc d c” 처럼 공백이 2개이상 연속되어있는 문자열의 경우는??

소스코드

Character 형에서 ‘ ‘의 경우 어떻게 비교해야하나 생각했다
c = ‘ ‘라면 c== ‘ ‘도 안되고,
‘\0’이랑은 또 다른거라 어떻게 비교하지 싶었는데
Character.isWhitespace(비교할문자)가 있었다

class Solution {
	public String solution(String s) {
		StringBuilder sb = new StringBuilder();
		int idx = 0;
		int p = 0;
		boolean wordStart = false;
		while (idx < s.length()) {
			if (Character.isWhitespace(s.charAt(idx))) {
				if (wordStart) {
					sb.append(s.substring(p, p + 1).toUpperCase());
					sb.append(s.substring(p + 1, idx).toLowerCase());
					wordStart = false;
				}
				sb.append(" ");
			} else {
				if (!wordStart) {
					p = idx;
					wordStart = true;
				}

			}
			idx++;
		}
		if (wordStart) {
			sb.append(s.substring(p, p + 1).toUpperCase());
			sb.append(s.substring(p + 1, idx).toLowerCase());
		}

		return sb.toString();
	}
}

댓글남기기