코딩테스트/Programmers

[프로그래머스] 둘만의 암호

grove1212 2025. 3. 13. 04:49

1. 다른 분의 풀이를 참고한 풀이

쉽게 char을 하나씩 증가시키면서 비교하면 되는데 일단 index만큼 증가시켜놓고 skip된게 있으면 그제서야 하나씩 더 올리려고 했던 나,,, 괜히 쉽게 가려다가 더 어렵게 가는 경우가 많은 것 같다. 이런건 어떻게 해야하나!

그리고 간과했던 것 string.contains! 함수들을 진짜 한번은 정리하는 시간이 필요한 것 같기도 하당.

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        char[] chars = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i<s.length() ; i++){
            char ch = chars[i];
            int plus = 0;
            
            while(plus < index) {
                ch = (char)((ch - 'a' + 1)%26 + 'a');
                if(!skip.contains(String.valueOf(ch)))
                    plus++;
            }
                     
            
            sb.append(ch);
            
        }
        return sb.toString();
    }
}

 

 

2. 다른 분 풀이

어렵게 수학적으로 접근하기 보다는 심플하게 문자가 증가하다가 z가 되면 a로 증가하는 로직으로 구성되어있는데, 가독성이 훨씬 좋아지는 것 같다. 내가 푼 풀이는 ASCII코드에 대한 이해가 없으면 이해하기 어렵다.

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

        for (char letter : s.toCharArray()) {
            char temp = letter;
            int idx = 0;
            while (idx < index) {
                temp = temp == 'z' ? 'a' : (char) (temp + 1);
                if (!skip.contains(String.valueOf(temp))) {
                    idx += 1;
                }
            }
            answer.append(temp);
        }

        return answer.toString();
    }
}