Programmers | 코딩테스트 연습 - 이상한 문자 만들기(자바)

2023. 4. 26. 11:23공부/Programmers

프로그래머스 Lv.1 이상한 문자 만들기

 

 

JAVA

- 테스트에서는 통과했으나, 제출은 실패한 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] arr = s.split(" ");
        
        for(String wrd : arr){
            for(int i=0; i<wrd.length(); i++){
                if(i%2 == 0){	//짝수번째 : 대문자
                    answer += (wrd.charAt(i) + "").toUpperCase();
                }else{			//홀수번째 : 소문자
                    answer += (wrd.charAt(i) + "").toLowerCase();
                }
            }
            answer += " ";	//한단어 끝나고 띄어쓰기 하나 추가
        }
        
        return answer.substring(0,answer.length()-1);	//마지막 띄어쓰기 제외하고 리턴
    }
}

입출력 예시로 나온 "try hello world" 단어와 제한 사항 2가지로만 코드를 짜다보니

놓친 부분이 있어서 실제 테스트에서는 실패하였다.

 

문제를 다시 읽어서 여러 테스트 케이스를 추가하였다.

아래는 내가 추가한 테스트 케이스로 테스트 해 본 결과이다.

문제를 통해 놓칠 만한 부분을 체크해보았다.

1. 주어지는 문자열s는 모두 소문자일 수도 있고, 모두 대문자일 수도 있고, 대소문자가 섞여 있을 수도 있다.

2. 단어 사이에 있는 공백 문자가 "하나 이상"이라고 했기 때문에 2개, 3개, 4개,,, 그 이상이 올 수 있다.

3. 공백 문자가 맨 앞이나 맨 뒤에도 있을 수 있다.

 

 

- 위의 사항 고려하여 다시 작성한 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] arr = s.split("");
        int cnt = 0;
        
        for(String wrd : arr){
            //공백 문자가 있을 경우 cnt=0초기화
            cnt = wrd.contains(" ") ? 0 : ++cnt;
            
            //짝수번째-소문자, 홀수번째-대문자
            answer += (cnt%2 == 0) ? wrd.toLowerCase() : wrd.toUpperCase();
        }
        
        return answer;
    }
}

공백 문자가 있는 경우에 cnt = 0으로 초기화하고, answer에 공백 문자 추가

문자가 있는 경우엔 cnt + 1하여,

홀수일 때 대문자로 변경하여 answer에 문자 추가 / 짝수일 때 소문자로 변경하여 answer에 문자 추가

 

결과

내가 추가한 테스트 케이스도 통과

 

제출 후 채점한 결과도 통과