프로그래머스 - 둘만의 암호

0

TIL

목록 보기
125/126

우선, 문자열들을 배열로 변경한 뒤 각각의 인덱스를 index만큼 더하고
그 사이에 skip이 있다면 추가로 더하는 방향을 생각해보았다.


수정 전 코드

public String solution(String s, String skip, int index) {
    char[] sArray = s.toCharArray();
    char[] skipArray = skip.toCharArray();

    for (int i = 0; i < sArray.length; i++) {
        for (int j = 0; j < skipArray.length; j++) {
            if (sArray[i] <= skipArray[j] && skipArray[j] <= sArray[i] + index) {
                sArray[i]++;
            }
        }
        sArray[i] += index;

        while (sArray[i] > 122) {
            sArray[i] -= 26;
        }
    }

    String answer = new String(sArray);

    return answer;
}

이 코드로는 처음 입출력 예의 테스트는 통과했으나
제출 후 채점하기에서 처참한 결과가 나왔다.

디버그를 실행해서 찾다보니
s = "xy", skip = "za", index = 1 일 때
결과값으로 "yb"가 나와야하지만 "ya"가 출력되었다.

원인은 sindex만큼 모두 더하고 난 뒤에 'z'를 넘어간다면 -26을 하도록 설계해서 'a'의 스킵 유무를 확인하지 못했기 때문이었다.


수정 후 코드

public String solution(String s, String skip, int index) {
    char[] sArray = s.toCharArray();

    for (int i = 0; i < sArray.length; i++) {
        for (int k = 0; k < index; k++) {
            sArray[i]++;
            if (sArray[i] > 'z') {
                sArray[i] -= 26;
            }
            if (skip.contains(String.valueOf(sArray[i]))) {
                k--;
            }

        }
    }

    String answer = new String(sArray);

    return answer;
}

s의 배열의 각 인덱스에 1씩 더하면서 skip에 포함된다면 한번 더 더하는 과정을 반복하는 코드로 수정하였다.

0개의 댓글