Algorithms/- 프로그래머스

프로그래머스 - 이상한 문자 만들기 [자바]

자굿 2022. 2. 2. 11:09
 

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

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

programmers.co.kr

 

정답

class Solution {
    public String solution(String s) {
        String[] arr = s.split("");

        int idx = 0;
        for(int i=0; i<arr.length; i++){
            if(" ".equals(arr[i])){
                idx = 0;
                continue;
            }

            if(idx % 2 == 0){
                arr[i] = arr[i].toUpperCase();
                idx++;
            }else{
                arr[i] = arr[i].toLowerCase();
                idx++;
            }
        }

        StringBuilder sb = new StringBuilder();

        for(String str : arr){
            sb.append(str);
        }

        return sb.toString();
    }
}

 

분석

문제가 좀 잘 못 되었다.


단어별 대소문자 변환해서 리턴하라고만 설명이 되어있는데


공백이 하나 이상 들어가 있고 공백까지 모두 포함해서 동일하게 return해줘야한다.


그래서 split(" ")로 해결하려고 하면 절대 해결되지 않고

 

split("")으로 분리한 후 단어별 index를 지정하여 풀어야 한다.

 

참고할 만한 정답

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;
  }
}

 

비교 분석

  • 위 정답을 보니까 굳이 기존 배열에 넣고 나중에 for문을 할 필요가 없어보인다.

 

비교 분석 반영

class Solution {
    public String solution(String s) {
        String[] arr = s.split("");
        StringBuilder sb = new StringBuilder();

        int idx = 0;
        for(int i=0; i<arr.length; i++){
            if(" ".equals(arr[i])){
                idx = 0;
                sb.append(arr[i]);
                continue;
            }

            if(idx % 2 == 0){
                sb.append(arr[i].toUpperCase());
                idx++;
            }else{
                sb.append(arr[i].toLowerCase());
                idx++;
            }
        }

        return sb.toString();
    }
}

 

반응형