반응형

 

 

문제 설명


 

문자열 s는 한 개 이상의 단어로 구성되어있다. 

 

각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 

 

각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수를 구현하세요.

 

 

코드 


 

class Solution {
    public String solution(String s) {
        String[] str = s.split(" ");
        
        for (int i = 0; i < str.length; i++){
            str[i] = changeUpper(str[i]);
        }
                
        return String.join(" ", str);
    }
    
    private String changeUpper(String str){
        
        String[] arr = str.split("");
        
        for(int i = 0; i < arr.length; i++){
            
            if(i % 2 == 0){
                arr[i] = arr[i].toUpperCase();
            }
            
        }
        return String.join(" ", arr);
    }
}

 

이렇게 풀어보았는데 테스트는 성공하지만 제출했을 때 실패가 나온다. 

공백기준으로 배열을 만들었고, 그 배열을 돌면서 changeUppper 메서드를 실행하게 구현하였다. 

changeUpper는 위에서 만든 문자열 배열 중 하나의 문자열만 들어오게 되어있고, 그 문자열 내부에서 짝수인 경우에만

UpperCase()를 주도록 설계 했다. 도대체 왜 안되는걸까 ? 

 

공백이 문제였다. 

 

이 문제를 해결하려면 공백도 유지를 해야한다고 한다. 단순히 내가 사용한 split 메서드를 사용하게 되면 공백 정보가 깨져 버린다. 

그런데 여기서 궁금한것은 공백을 리턴을 해줄때 같이 넣어주는데 문제가 되는 이유가 뭘까.. 

 

문제를 잘읽어야 한다.. 덜렁이는 성격이라 더 꼼꼼해지려고 노력을 해야할 필요가 있다.

하나 이상의 공백이 들어온다고 했다. 결국에는 split으로 공백을 제거 하면 연속된 공백또한 그냥 제거가 되는거다. 

 

class Solution {
    public String solution(String s) {
        
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        
        for(char c : s.toCharArray()){
            
            if(c == ' '){
                
                answer += " ";
                idx = 0;
            }
            else {
                
                if(idx % 2 == 0) {
                    
                    answer += Character.toUpperCase(c);
                }
                else {
                    
                    answer += Character.toLowerCase(c);
                }
                idx++;
            }
        }
        return answer;
    }
}

 

split 메서드가 아니라 공백제거를 하나하나 손으로 해야한다. 

우선 idx는 단어 안에서 몇 번째 글자인지 index 역할을 해준다. 

공백이게 되면 공백을 넣어주고 idx 를 0으로 초기화 시켜준다. 

 

그리고 아래 두번째 if문에서는 짝수인지 홀수인지 확인하여 대문자와 소문자로 변환해주는 로직이다. 

 

 

정리


 

첫 번째 문제를 꼼꼼하게 잘 읽고 천천히 읽는 습관을 들여야 한다. 

 

그리고 공백은 ' ' 이거로 표현할 수 있다는 것을 알게 되었다. 

 

728x90
반응형