이상한 문자 만들기

이윤설·2024년 4월 26일

제출코드(오답)

class Solution {
    public String solution(String s) {
        String answer = calc(s);
        return answer;
    }

    static String calc(String s) {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                sb.append(" ");
            }
            if (s.indexOf(c) % 2 == 0 || s.indexOf(c) == 0) {
                // c를 대문자로
                char character = Character.toUpperCase(c);
                sb.append(character);
            }
            if (s.indexOf(c) % 2 != 0) {
                // c를 소문자로
                char character = Character.toLowerCase(c);
                sb.append(character);
            }
        }
        return sb.toString();
    }
}
  • 공백은 " "가 아니라 ' '로 작성해야만 한다.
  • 그런데 만약 char이 n번 등장하면 인덱스는 맨 처음 등장한 char의 인덱스로 인식하는 문제점이 발생한다.

모범답안

class Solution {
    public String solution(String s) {
        return calc(s);
    }

    static String calc(String s) {
        StringBuilder sb = new StringBuilder();
        int wordIndex = 0; // 단어 내에서의 인덱스를 관리하기 위한 변수

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                sb.append(c);
                wordIndex = 0; // 공백을 만나면 단어 인덱스를 0으로 초기화
            } else {
                if (wordIndex % 2 == 0) {
                    // 단어 내에서의 인덱스가 짝수이면 대문자로 변환
                    sb.append(Character.toUpperCase(c));
                } else {
                    // 단어 내에서의 인덱스가 홀수이면 소문자로 변환
                    sb.append(Character.toLowerCase(c));
                }
                wordIndex++; // 단어 내 인덱스 증가
            }
        }
        return sb.toString();
    }
}

문제점을 해결하려면 각 공백을 만날 때마다 인덱스를 0으로 초기화하면 된다.
근데 헷갈리면 안되는게 공백은 index를 0으로 설정할 뿐, index를 ++하지 않는다. 그래서 공백은 인덱스가 없다.

배운점

  1. 공백은 " " 가 아니라 ' '다.
  2. 공백에서 index를 0으로 리셋하면 char이 n번 등장하는 경우 인덱스는 맨 처음 등장한 char의 인덱스로 인식하는 문제점을 해결할 수 있다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글