프로그래머스 코딩테스트/JAVA

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

Coding-Su 2024. 9. 20. 08:32
728x90

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.

  • 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
  • index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
  • skip에 있는 알파벳은 제외하고 건너뜁니다.

두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 5 ≤ s의 길이 ≤ 50
  • 1 ≤ skip의 길이 ≤ 10
  • s와 skip은 알파벳 소문자로만 이루어져 있습니다.
  • skip에 포함되는 알파벳은 s에 포함되지 않습니다.
  • 1 ≤ index ≤ 20

 

 

풀이

import java.util.*;
class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";

        for(int i = 0; i < s.length(); i++) {
            char a = s.charAt(i);
            for(int j = 0; j < index; j++) {
                a = (char)(a + 1);
                if(skip.contains(a+"")) j--;
                if((int)a > 122) {
                    a -= 26;
                    if(skip.contains(a+"")) j--;
                }
            }
            answer += a;
        }

        return answer;
    }
}

 

 

 

정답

for 문을 돌면서 s에 한 글자씩 접근합니다. 총 index만큼 문자가 이동해야 하므로 for문을 돌면서 index값을 더해주는데 이때 skip에 값이 존재한다면 j의 값을 1 빼줍니다.(즉, index가 만약 5라고 하면 skip에 문자가 있다면 5번이 아닌 6번 이동해야합니다. 따라서 1을 빼서 6번 이동하도록 합니다.)

 

마지막으로 index를 더하다가 122(z)보다 크면 26을 빼서 a부터 다시 시작하도록 하여 문제를 풀었습니다.

728x90