프로그래머스 | LV.1 둘만의 암호 - 문자열 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.1 둘만의 암호 - 문자열 구현 문풀 (Java)

https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

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

programmers.co.kr

문제 설명


💚문제 접근 방식

규칙 대로 구현하면 되는 문제였다.

  1. s의 각 알파벳 idx 만큼 뒤의 알파벳으로 바꿀 것
  2. idx만큼 뒤의 알파벳이 z를 넘길 경우 (순환구조처럼) a로 돌아가서 철
  3. skip에 있는 알파벳은 건너뛸 것

[문제 풀이]

  1. String alpha 에 a~z까지 문자 중 skip 에 포함되는 문자는 건너뛰고 담아준다.
  2. for문으로 바꿔야 하는 대상 문자열 s를 순회하면서 현재 지칭 중인 idx를 찾고
  3. 바꿔줘야 할 idx인 cur에 담기 위해 (idx+index) % alpha 로 나눠줬다.

         → 그렇게 되면 나머지에 담긴 값이 자동으로 a부터 찍기 마련이므로

    4. 바뀐 문자 각각을 answer에 누적해서 담아주고 리턴하면 그것이 규칙대로 바뀐 문자열이 된다.

💚 제출 코드

import java.util.*;
class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        String alpha = "";
        
        //알파벳 배열 하나 생성하기
        for(char k = 'a'; k<='z'; k++){
            if(skip.contains(Character.toString(k))) continue;
            alpha += k;
        }
        
        //만들기
        for(char x : s.toCharArray()){
            int idx = alpha.indexOf(x);
            //순환 구조 끝단에 만나면 처음을 찍도록 
            int cur = (idx + index) % alpha.length();
            
            //변환된 문자 담기
            answer += alpha.charAt(cur);
        }
        
        
        return answer;
    }
}

💚 회고

20분 정도 걸렸다. 단순하게 문자열 처리하는 구현 문제였다. 시간복잡도는 for문으로 순회하고 있는 s의 경우, 최대 50 정도이기 때문에, 처리하는데 시간이 크게 문제되지 않고 시간 내에 동작한다.

728x90