<프로그래머스>이상한 문자만들기

박서윤·2023년 10월 23일

알고리즘 연습

목록 보기
2/4

이 문제를 풀기 위해 접근 방식을 다섯 단계로 나눴다

  1. 문자를 공백기준으로 나눠서 문자열로 저장
  2. 저장한 문자열을 StringBuilder를 사용할 새로운 배열에 복사
  3. StringBuilder를 이용하여 짝수/홀수 인덱스로 판단해 각각의 단어를 대문자, 소문자로 바꾸기
  4. 바꾼 문자열을 공백과 함께 추가하기
  5. 다시 문자배열로 바꿔줌과 동시에 맨 앞과 맨뒤의 공백을 제거해주기
import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String[] str = s.split(" ");
        StringBuilder transformedStr = new StringBuilder();
        for (String word : str) {
            StringBuilder transformWord = new StringBuilder();

            for (int i = 0; i < word.length(); i++) {
                char ch = word.charAt(i);
                if (i % 2 == 0) ch = Character.toUpperCase(ch);
                else ch = Character.toLowerCase(ch);
            transformWord.append(ch);
            }
        transformedStr.append(transformWord).append(" ");
        }

        return transformedStr.toString().trim();
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution("try hello world"));
    }
}

코드를 완성한 후 채점을하니 절반 가까운 테스트 코드에서 실패를 했다.

문제를 다시 읽어보고 오랜 시간 고민 후 여러가지 수정을 해보았다. 공백을 기준으로 문자열을 분리하는 것이 아닌 공백을 만났을때 인덱스를 카운팅하는 변수를 초기화하고 공백을 추가해주는 방식으로 바꾸었다.

public String solution(String s) {
    StringBuilder transformedStr = new StringBuilder();
    int idx = 0;

    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);

        if (ch == ' ') {
            transformedStr.append(ch);
            idx = 0;
            continue;
        }

        if (idx % 2 == 0) ch = Character.toUpperCase(ch);
        else ch = Character.toLowerCase(ch);
        
        transformedStr.append(ch);
        idx++;
    }

    return transformedStr.toString();
}


통과!

0개의 댓글