본문 바로가기

코딩테스트 연습/JAVA

[JAVA/알고리즘] 이상한 문자 만들기

반응형

https://programmers.co.kr/learn/courses/30/lessons/12930?language=java 

 

코딩테스트 연습 - 이상한 문자 만들기

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

programmers.co.kr

 

 

내 풀이

class Solution {
    public String solution(String s) {
        String answer = "";
        boolean isOdd = false;  // 홀수번째인가
        
        for (int i = 0; i < s.length(); ++i) {
            char ch = s.charAt(i);
            if (ch == ' ') {    // 공백
                answer += " ";
                isOdd = false;
            } else if (!isOdd) {    // 0이나 짝수번째
                answer += Character.toUpperCase(ch);
                isOdd = true;
            } else {    // 홀수번째
                answer += Character.toLowerCase(ch);
                isOdd = false;
            }
        }        
        
        return answer;
    }
}

 

 

처음 작성했던 코드

이 코드의 문제점은 문자열의 마지막이 띄어쓰기인 경우 못 골라낸다는 것이다. 근데 여러 테스트케이스를 통과를 못해서, 다른 예외가 있는지는 사실 잘 모르겠다.

 

 

다른 풀이

class Solution {
  public String solution(String s) {

        String answer = "";
        int cnt = 0;
        String[] array = s.split("");

        for(String ss : array) {
            cnt = ss.contains(" ") ? 0 : cnt + 1;
            answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase(); 
        }
      return answer;
  }
}

- 나는 boolean으로 했는데, int 로 공백을 처리하고 삼항연산자를 썼다는 것이 흥미로웠다. 삼항연산자 사용하는게 좀 익숙해졌다 생각했는데 생각보다 코딩할 때 잘 안쓰게 되는 것 같다.

- 그 외 다른 풀이로 그냥 처음부터 다 대문자로 바꿔놓고 소문자로만 바꾸는 풀이도 있었다. 바로 앞 문자가 대문자라면 소문자로 만드는 방법이었는데, 이 방법도 괜찮은 것 같다.

반응형