프로그래머스 | 둘만의 암호 (Java)

mul·2023년 2월 20일
0

알고리즘

목록 보기
25/65
post-custom-banner

문제 🔒

프로그래머스 Lv.1 연습문제 둘만의 암호

해결 🔑

두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 규칙대로 s를 변환한 결과를 return하는 solution함수를 작성하는 문제이다.

문자열 s의 각 알파벳(target)의 몇 번째 뒤의 알파벳인지 저장할 count 변수를 선언하고, 알파벳에 1씩 더해(target + 1) 뒤의 알파벳을 탐색한다. 탐색한 알파벳이 skip되지 않았다면 count에 1을 더한다. count가 index와 같아졌을 때의 알파벳(target)을 문자열에 합친다.

  1. 문자열 s의 길이만큼 for문을 돌려서 규칙대로 변환할 알페벳을 target에 저장
  2. 몇 번째 뒤의 알파벳인지 저장할 count 변수 0으로 초기화
  3. count가 index보다 작은 동안 while문을 돌려 target보다 하나 뒤의 알파벳(target+1)을 탐색
  4. +1된 target이 'z'보다 크다면 target에 26을 빼서 target을 'a'로 만들기
  5. 문자열 skip의 알파벳을 하나씩 탐색하여 target과 같으면 count에 1을 더하지 않는다.
  6. target이 skip해야할 알파벳이 아니라면 count++
  7. while문이 끝났다면 그 때의 target이 index번째 뒤의 알파벳이므로 sb에 append
  8. sb를 String으로 변환하여 answer에 저장 후 return

코드 🔓

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        
        // 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꾸기
        for (int i = 0; i < s.length(); i++) {
			char target = s.charAt(i);
			
			int count = 0;
			while(count < index) {
				target = (char)(target + 1);
				if (target > 'z') {
					target -= 26;
				}
				
				boolean sk = true;
				for (int j = 0; j < skip.length(); j++) {
					if (target == skip.charAt(j)) {
						sk = false;
						break;
					}
				}
				if (sk) {
					count++;
				}
			}
			sb.append(target);
		}
        
        answer = sb.toString();
        
        return answer;
    }
}
post-custom-banner

0개의 댓글