JadenCase 문자열 만들기
문제정의
영어 문자열이 주어질 때 공백을 기준으로 첫문자만 대문자로 만드는 프로그램을 작성하는 문제이다. 만약 첫문자가 영어가 아니라면 이어지는 문자들은 모두 소문자로 한다.
문제풀이
전체 코드는 다음과 같다. 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
31
32
33
34
35package level2;
public class JadenCase {
//프로그래머스 문제풀이 level2 JadenCase 문자열 만들기
public static void main(String[] args) {
String s = " s ab ";
String[] words = s.split(" ");
StringBuilder buff = new StringBuilder();
for(String str : words)
{
if(str.equals(""))
{
buff.append(" ");
continue;
}
else if(str.charAt(0) < 65 || str.charAt(0) > 123)
{
buff.append(str.toLowerCase());
}
else
{
buff.append(str.substring(0,1).toUpperCase());
buff.append(str.substring(1).toLowerCase());
}
buff.append(" ");
}
if(s.length() < buff.length())
buff.delete(buff.length()-1, buff.length());
else if(s.length() > buff.length())
buff.append(" ");
System.out.println(buff.toString());
}
}
이 처리가 끝나면 한가지 예외 케이스가 생긴다 바로 문자열의 맨끝에 공백이 있을 경우와 없을 경우를 잡아내지 못하는 것이다. 따라서 조건을 하나 더 추가하여 원래 문자열보다 작은지 큰지를 비교하여 작다면 공백을 추가하고 크다면 공백을 한 칸 제거한다.
최종 시간복잡도는 문자열 s의 길이를 n이라 할 때 \(O(n)\)이다.
테스트
공백 여러개를 처리하는 과정에서 약간 헤맸었는데, 다른 사람의 풀이를 보니 flag를 이용해서 코드를 더 간결하게 짠 것을 보고 감탄했다. 다음엔 나도 flag를 이용해 문제를 풀어야겠다.