[java] 프로그래머스 - JadenCase 문자열 만들기
업데이트:
문제
프로그래머스-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();
}
}
댓글남기기