본문 바로가기

프로그래머스(Java)/Level 1

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

728x90

코드 힌트

문자를 순회하며 변형하기:

  • 주어진 문자열 s의 각 문자를 한 번씩 순회하면서 변형합니다.

다음 문자로 이동하기:

  • 각 문자를 지정된 횟수만큼 다음 문자로 이동합니다.
    • 예를 들어, 'a'에서 시작하여 1번 이동하면 'b'가 됩니다. 2번 이동하면 'c'가 됩니다.

문자 순환 처리:

  • 알파벳은 'z'에서 'a'로 순환합니다. 만약 'z'에서 다음 문자로 이동해야 한다면, 다시 'a'로 돌아가야 합니다.
    • 배열로 알파벳의 index를 구하여 넘었는지 확인할 수도 있고, char 타입으로 바꾸어서 확인하셔도 됩니다.

건너뛸 문자 처리:

  • 주어진 문자열 skip에 포함된 문자는 건너뛰고, 다음 문자로 이동합니다.
    • 문자열에 포함이 됐는지는 contains() 메소드를 활용합니다.

조건 확인 및 이동:

  • 다음 문자로 이동할 때마다 건너뛸 문자인지 확인하고, 건너뛸 문자가 아니면 이동 횟수를 하나씩 줄여갑니다.
  • 이동 횟수가 0이 되면 해당 문자를 최종 변형 문자로 선택합니다.

 

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public String solution(String s, String skip, int index) {
        StringBuilder sb = new StringBuilder();
        
        // 문자열 s의 각 문자를 순회하며 변형
        for (char c : s.toCharArray()) {
            sb.append(shiftCharacter(c, index, skip));
        }
        
        return sb.toString();
    }
    
    static char shiftCharacter(char c, int index, String skip) {
        int count = 0;
        
        // 지정된 횟수만큼 문자를 변형
        while (count < index) {
            c++;
            
            // 'z'를 넘어가면 다시 'a'로 순환
            if (c > 'z') {
                c = 'a';
            }
            
            // 현재 문자가 건너뛸 문자에 포함되지 않는 경우만 count 증가
            if (!skip.contains(String.valueOf(c))) {
                count++;
            }
        }
        
        return c;
    }
}
728x90