둘만의 암호 (자바)

김재현·2023년 12월 5일
0

알고리즘 풀이

목록 보기
42/90

문제

정답 코드

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

        char[] chars = s.toCharArray();
        char[] skipChar = skip.toCharArray();

        for (char c : chars) {
            for (int i = 0; i < index; i++) {
                c = (char) (c + 1);
                while (c > 122) {
                    c = (char) (c - 26);
                }
                for (char skC : skipChar) {
                    if (c == skC) {
                        i--;
                    }
                }
            }
            answer += c;
        }

        return answer;
    }
}

먼저 char 배열에 문자열들을 담아준다.
그 뒤, 문자에 index 만큼 1씩 더하면서 'z'에 해당하는 122가 넘어가는지 체크하며, 넘어가면 -26으로 다시 한바퀴 돌려준다.
그리고 안착한 그 값이 skip에 들어있는 문자가 아닌지 확인하며, 들어있다면 한번 더 돌려주기 위해 i-- 한다.
나온 값을 c에 더하면 문자열로 완성!

개선한 정답

    public String solustion(String s, String skip, int index) {
        String answer = "";

        char[] chars = s.toCharArray();

        for (char c : chars) {
            for (int i = 0; i < index; i++) {
                c += 1;
                if (c > 'z') c -= 26;
                if (skip.contains(String.valueOf(c))) i--;
            }
            answer += c;
        }

        return answer;
    }

다른 사람의 풀이를 보니 122대신 'z'를 사용하는게 직관적이었다. 게다가 (char)를 안붙여도 되니 깔끔해지더라.
그리고 skip에 있는 문자인지 확인을 contains로 했는데, 아주 좋은 방법인 것 같아 따라해보았다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글