반응형
프로그래머스 programmers Level2 JadenCase 문자열 만들기 - java 자바
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12951
[풀이]
※ 문제 : JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
처음 문제를 풀었을때, 제한사항을 주의깊게 읽지 않아 공백이 여러개 올 수 있다는 사실을 간과했다.
다음의 경우를 고려해야한다.
- 문자열이 공백으로 시작하는 경우
- 문자열 사이에 공백이 2개이상 존재하는 경우
- 문자열이 공백으로 끝나는 경우
처음에 s.split(" ") 을 이용해서 공백으로 문자열을 잘라서 확인하니, 여러 공백케이스를 생각해야해서 고민이 됐다.
s.split(" ") 으로 할 경우, 마지막 공백을 알 수 없다.
s.split(" ", -1) 로 할 경우, 마지막 공백은 알 수 있지만, 중간에 나오는 공백으로 하나씩 잘려있다.
※ s.split(" ") 와 s.split(" ", -1) 의 차이
그래서 공백으로 자르지 않고, 모든 글자를 하나씩 잘라서 확인했다.
사실 boolean 으로 플래그 변수를 이용하는 것이 좋다고 할수는 없지만, 그 방법을 사용했다.
- 모든 문자를 소문자로 변환해둔다.
- ""으로 모든 글자를 하나씩 잘라서 배열을 생성한다.
- 생성된 배열을 for 문으로 하나씩 확인하며
3.1. 공백이면 답안에 공백을 추가하고 다음에 오는 문자는 대문자가 될것이므로 isFirst 플래그를 true로 해준다.
3.2. 공백 다음으로 첫 문자가 오면 (isFirst = true) 대문자로 넣고, 다음은 첫 문자가 아니므로 isFirst 플래그를 false 로 해준다.
3.3. 문자 다음 문자열이면 (isFirst = false) 소문자 넣는다.
[java 코드]
/**
* JadenCase 문자열 만들기
* @param s 문자열, 공백으로 구분된 단어, 공백 연속 가능성 있음
* @return s를 JadenCase 로 바꾼 문자열
* JadenCase : 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열
*/
public String solution(String s) {
String answer = "";
StringBuilder sb = new StringBuilder();
// 첫글자만 대문자이므로 전체를 소문자로 변환해둔다.
s = s.toLowerCase();
String[] strings = s.split("");
// 대문자로 바꾸기
boolean isFirst = true;
for (String str : strings) {
// 공백인경우
if (BLANK.equals(str)) {
sb.append(BLANK);
isFirst = true;
continue;
} else {
// 공백이 아니면 첫글자만 대문자
if (isFirst) {
sb.append(str.toUpperCase());
isFirst = false;
} else {
sb.append(str);
}
}
}
answer = sb.toString();
return answer;
}
반응형