[프로그래머스] [Java] JadenCase 문자열 만들기
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
입출력 예
s | return |
3people unFollowed me | 3people Unfollowed Me |
for the last week | For The Last Week |
🌈 Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.regex.Pattern;
class Solution {
public String solution(String s) {
String answer = "";
s = s.toLowerCase(); // 모두 소문자로 바꾸기
String[] tokens = s.split(" "); // 공백을 기준으로 단어 분리
for (int i = 0; i < tokens.length; i++) {
String str = tokens[i];
if ("".equals(str)) { // 공백이 연속으로 입력될 경우
answer += str;
} else if (Pattern.matches("^[a-z]*$", str.substring(0, 1))) { // 첫 문자가 영문일 경우
answer += str.substring(0, 1).toUpperCase() + str.substring(1);
} else {
answer += str;
}
if (i < tokens.length - 1)
answer += " ";
}
if (" ".equals(s.substring(s.length()-1)))
answer += " ";
return answer;
}
}
|
cs |
📢 만만하게 봤다가 큰코 다친 문제였다! 😅
그냥 단순히 공백을 기준으로 토큰을 나누고, substring으로 첫 번째 문자만 대문자로 바꿨었는데 갑분 런타임 에러...
여기저기 찾아보니 공백이 연속으로 나오는 테스트 케이스가 있다고 한다.
a(공백)(공백)b 라면 A(공백)(공백)b로 바뀌어야 한다는 것!
제한 조건 3번 [첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다.] 를 무시하면 안 됐던 것이다...
그래서 정규표현식을 사용해서 검사했는데,나머지 테스트 케이스는 다 통과해도 8번이 틀렸다고 나왔다.
8번 케이스가 뭔질 알아야 고치든가 할텐데 … 하면서 질문 목록을 찾아봤고 나와 같은 고민을 하는 사람이 있었다.

결론은 중간이든 마지막이든 공백을 세심히 처리해주어야 한다는 것!
👩💻 풀어보기 👨💻 https://programmers.co.kr/learn/courses/30/lessons/12951
코딩테스트 연습 - JadenCase 문자열 만들기
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건
programmers.co.kr