Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

탄탄대로

[Level 1] 이상한 문자 만들기 본문

코딩테스트

[Level 1] 이상한 문자 만들기

nvvs 2022. 7. 27. 17:49

- 깔끔하게 코드를 짤 수 있을텐데....!

- I could have made the code better....! (야나두에서 배운거 써먹기 ( ͡° ͜ʖ ͡°)✧)

 

문제

"문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요."

 

제한사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"

 

풀이

class Solution {
    public String solution(String s) {
        String answer = "";
        
        String[] ss = s.split(" ", -1);
        
        for(int i = 0; i < ss.length; i++){
            String[] sss = ss[i].split("");
            String res = "";
            for(int j = 0; j < sss.length; j++){
                if(j % 2 == 0){
                    res += sss[j].toUpperCase();
                }else{
                    res += sss[j].toLowerCase();
                }
            }
            
            ss[i] = res;
        }
        
        for(int c = 0; c < ss.length; c++){
            if(c == ss.length-1){
                answer += ss[c];
            }else{
                answer += ss[c] + " ";
            }
        }
        
        return answer;
    }
}

 

장황하도다, 장황해!

생각을 많이 안하고 그냥 짠거라고 변명해보겠다...

처음엔 split()에 -1을 넣지 않았는데, 몇가지 테스트 케이스에서 오류가 났다. 

그래서 혹시? 하고 -1을 넣었더니 다 통과 되었다.

이유가 뭐였을까?

만일 -1을 인자로 넣지 않으면 문자열 후행에 빈 값이 있을 경우 잘려서 나올 것이다.

" try hello world " → " TrY HeLlO WoRlD"

 

하지만 -1을 넣으면 정규식 패턴을 최대한 많이 적용하기 때문에 뒤에 있는 빈 값까지 모두 나올 것이다.

" try hello world " → " TrY HeLlO WoRlD "

 

이런 이유로 -1을 넣었을때 성공하지 않았나 싶다.

 

사실은 char 배열로 만든 다음에 반복문을 돌리고 싶었다. 하지만 공백일 경우를 어떻게 처리할지 모르겠어서 넘어갔다.

다른 사람들 풀이를 보고 아, 이렇게 했으면 됐겠구나, 정말 생각 없이 짰구나 싶었다.

반성..ㅎㅎ

 

다른 풀이

class Solution {
    public String solution(String s) {
        char[] c = s.toCharArray(); 
        int idx = 0;
        
        for(int i = 0; i < c.length; i++){
            if(c[i] == ' '){
                idx = 0;
            }
            else {
                c[i] = (idx++ % 2 == 0 ? 
                            Character.toUpperCase(c[i]) : Character.toLowerCase(c[i]));
            }
        }
        
        return String.valueOf(c);
    }
}

 

훨씬 깔끔!

인덱스 값을 따로 만들어서 공백일 경우 초기화 할 수 있게 했다.

 

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == ' '){
                idx = 0;
                sb.append(" ");
            }
            else{
                sb.append((idx++ % 2 == 0 ? 
                           Character.toUpperCase(s.charAt(i)) : Character.toLowerCase(s.charAt(i))));
            }
        }
        
        return sb.toString();
    }
}

 

StringBuilder를 사용해서 푼 것도 있었다.

 

 

 

 

[ 문제 출처 : 프로그래머스 ]

'코딩테스트' 카테고리의 다른 글

[Level 0] 옹알이  (0) 2022.10.12
[Level 1] 정수 내림차순으로 배치하기  (0) 2022.08.01
[Level 1] 제일 작은 수 제거하기  (0) 2022.07.19
[Level 1] 콜라츠 추측  (0) 2022.07.19
[Level 1] 평균 구하기  (0) 2022.07.18