알고리즘 문제 연습

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

codi-3 2024. 8. 1. 20:29

🔍문제


📊분석 

  • String s를 for문을 이용하여 각각의 character를 받는다.
  • 이중 for문을 이용해 알파벳 배열상 index 만큼 후에 위치한 character를 answer의 순서대로 저장해 준다.
    • 주의: 알파벳 배열상 26인 z보다 범위가 초가 할 시에는 a부터 다시 시작되니 알파벳정열상 index를 -26을 해주면 된다.
    • 만약 추가되는 index 범위 안에 skip에 포함된 character 가있을 시 skip에 포함된 개수에 character만큼 index에서  빼준다. 

✏️풀이

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        
        for(int i =0; i<s.length();i++){
            char c = s.charAt(i);
            
            for(int j = 0; j < index; j++){
            	//String s에 위치한 i번쨰 알파벳을 index만큼 증가하여 새롭게 정의
                c += 1;
                
                //증가된 알파벳이 z의 인덱스 범위를 초가할시 a부터 다시시작
                if (c > 'z'){
                    c-=26;
                }
                
                //String skip에 해당 알파벳이있다면 위의 j포문을 다시돌아 알파벳의 index를 다시증가.
                if(skip.contains(String.valueOf(c))){
                    j--;
                }
            }
            //정답출력을위해 나온 c들을 String answer의 삽입
            answer += c;
        }
        return answer;
    }
}

 

문제를 풀기 전에는 char값에 숫자를 이용해 인덱스를 움직일 수 있는 줄 알지 못해서 처음에는 알파벳 천체를 포함한 Array를 이용하여 문제를 풀이하려고 했다. 앞으로 더 많은 로직들을 배우면 훨씬 더 가독성이 좋고 복잡하지 않은 효율적인 코드를 완성할 수 있을 거 같다.