알고리즘/프로그래머스

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

이준생 2021. 1. 12. 22:46
728x90
반응형
SMALL

문제 설명

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(01))) { // 첫 문자가 영문일 경우
                answer += str.substring(01).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

 

728x90
반응형
LIST