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

이은정·2024년 9월 24일

프로그래머스/Java

목록 보기
42/74

문제

첫 번째 풀이 (실패)

로직

문자열을 공백을 기준으로 배열로 나눈다. 그러면 단어의 수 길이의 문자열 배열이 만들어진다.
문자열을 돌면서 각 문자열 안에서 짝수 번째 인덱스의 값은 대문자로 변경하고 홀수 번째 인덱스의 값은 소문자로 변경한다.
배열을 다시 문자열로 합쳐서 반환한다.

코드

class Solution {
    public String solution(String s) {
        String[] strArr = s.split(" ");
        
        for (int i = 0; i < strArr.length; i ++) {
            String str = "";
            
            for (int j = 0; j < strArr[i].length(); j ++) {
                char ch = strArr[i].charAt(j);
                
                if (j % 2 == 0) {
                    str += Character.toUpperCase(ch);
                }
                else {
                    str += Character.toLowerCase(ch);
                }
            }
        
            strArr[i] = str;
        }
        
        return String.join(" ", strArr);
    }
}

결과

input: " TRy HElLo WORLD "
output: " TrY HeLlO WoRlD "

위의 테스트케이스에서 오류가 발생한다.

2번째 풀이

로직

마지막에 공백이 나올 때도 체크해주기 위하여 아래와 같이 로직을 구상했다.
s를 공백 기준으로 배열로 나누지 않고 s의 모든 index를 돈다.
인덱스를 세는 수를 checkIndex라고 하고 0으로 초기화한다.
문자가 공백이 아닌 경우에 checkIndex가 짝수면 대문자로 변경하여 저장한다.
문자가 공백이 아닌 경우에 checkIndex가 홀수면 소문자로 변경하여 저장한다.
문자가 공백인 경우에는 checkIndex를 변경하고 공백을 저장한다.

코드

class Solution {
    public String solution(String s) {
        String answer = "";
        int checkIndex = 0;
        
        for (int i = 0; i < s.length(); i ++) {
            char ch = s.charAt(i);
            
            if (ch == ' ') {
                answer += " ";
                checkIndex = 0;
            }
            else {
                if (checkIndex % 2 == 0) {
                    answer += Character.toUpperCase(ch);
                }
                else {
                    answer += Character.toLowerCase(ch);
                }
                
                checkIndex ++;
            }
        }
        
        return answer;
    }
}

결과

profile
돈 많은 백수가 꿈인 백엔드 개발자 지망생

0개의 댓글