[JAVA] 둘만의 암호

(문제)

두 줄 모래 건너뛰기와 자연수 인덱스를 지정하면 다음 규칙에 따라 문자열을 구성하려고 시도합니다.
암호 규칙은 다음과 같습니다.

  • s의 각 문자 알파벳을 색인으로 다시 변경합니다.
  • 인덱스 수에 따른 알파벳 z를 초과하면 다시 로 돌아갑니다.
  • Skip의 알파벳을 제외하고.

예를 들어 에스 = “오크스”, 건너뛰다 = “wbqd”, 색인 = 5, a의 알파벳 5는 f이지만 (b, c, d, e, f)에서 ‘b’와 ‘d’는 스킵에 포함되기 때문에 카운트되지 않습니다.
따라서 “b”와 “d”를 제외하고 알파벳은 (c, e, f, g, h)의 순서로 “a”에서 “h”까지 5가 됩니다.
위의 규칙에 따라 나머지 “ukks”를 변경하면 “appy”가 되고 결과는 “happy”가 됩니다.

두 줄 모래 건너뛰기와 자연수 위의 규칙에 따라 index가 매개변수로 지정된 경우 solve 함수를 완성하여 s 변환 결과를 반환합니다.


(제한)

  • 5 ≤ 길이 s ≤ 50
  • 1 ≤ 점프 길이 ≤ 10
  • 모래 건너뛰기는 알파벳의 소문자로만 구성됩니다.
    • 스킵에 포함된 알파벳 s에 포함되지 않습니다.
  • 1 ≤ 색인 ≤ 20

(내 솔루션)

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";

        char() arr = s.toCharArray();

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

}

(솔루션 프로세스)

1. toCharArray()로 문자열을 하나씩 분리합니다.

2. 색인 번호 뒤의 각 문자를 알파벳으로 변환하는 이중 루프를 수행합니다.

3. 알파벳 ‘z'(ASCII 코드 값)의 끝보다 커질 때 -26 첫 번째 알파벳 ‘a’로 돌아갑니다.

4. 제외 목록에 있으면 루프를 다시 반복합니다.

끝!