새소식

반응형
250x250
Programmers/Lv.1

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

  • -
728x90
반응형

 

초기설정

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        int first = 'a';
        int last = 'z';
        StringBuilder sb = new StringBuilder();
        int[] pass = new int[skip.length()];
        for(int i = 0; i < skip.length(); i++) {
            pass[i] = skip.charAt(i);
        }

 

  • StringBuilder를 활용해서 효율적으로 문자열을 생성한다.
  • first와 last는 'a'와 'z'를 아스키코드로 변환한 숫자이다.
  • pass는 skip의 각 문자를 아스키코드로 변환하여 숫자로 만든 배열이다.

문자 변환 로직

 

        for(int i = 0; i < s.length(); i++) {
            int now = s.charAt(i);
            for(int j = 1; j <= index; j++) {
                now += 1;
                if(now > last) now = first;
                for(int k = 0; k < pass.length; k++) {
                    if(now == pass[k]) {
                        j--;
                        break;
                    }
                }
            }
            sb.append(String.valueOf((char) now));
        }

 

  • 's' 문자열의 각 문자를 순회하며 index만큼 이동시킨다.
  • 이동하는 과정에서 z를 넘어가면 다시 a로 이동시킨다.
  • 이동할 때마다 pass에 있는 문자와 동일하게 되면 j를 감소시켜 그 문자는 카운트 하지 않는다.

결과 반환

 

        answer = sb.toString();
        return answer;
    }
}

 

전체 코드

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        int first = 'a';
        int last = 'z';
        StringBuilder sb = new StringBuilder();
        int[] pass = new int[skip.length()];
        for(int i = 0; i < skip.length(); i++) {
            pass[i] = skip.charAt(i);
        }
        for(int i = 0; i < s.length(); i++) {
            int now = s.charAt(i);
            for(int j = 1; j <= index; j++) {
                now += 1;
                if(now > last) now = first;
                for(int k = 0; k < pass.length; k++) {
                    if(now == pass[k]) {
                        j--;
                        break;
                    }
                }
            }
            sb.append(String.valueOf((char) now));
        }
        answer = sb.toString();
        return answer;
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.