본문 바로가기

카테고리 없음

프로그래머스_Level_1_둘만의 암호

import java.util.*;

class Solution {
    public String solution(String s, String skip, int index) {
        ArrayList<Character> list = new ArrayList<>();//각 문자는 char이므로 어레이 리스트로 char선언
        
        for(int i = 0; i < 26; i++){//알파벳이 있는 리스트를 만들어 준다.리스트에는 모든 알파벳이 전부 포함된다.
            list.add((char)('a' + i));//아스키코드를 이용한다 아스키 코드에서의 a의 값은 저번에 풀었던 문제를 생각하자
        }
        
        for(Character alphabet : skip.toCharArray()){//String.toCharArray()를 사용하면 각각의 인덱스에 맞게 단어를 쪼개준
            //다.이번에는 보다 코드를 줄이기 위해 Character item:을 사용해서 skip에 속한 단어들을 아예 제거해주어 
            //제외하고 건너뛴다는 목적에 맞추어준다.
            list.remove(alphabet);
        }
        //이제 가져온 String s의 내용을 index에 맞추어서 더해주고 그 값을 뽑으면 된다.
        StringBuilder myBuilder = new StringBuilder();

        for(Character alphabet2 : s.toCharArray()){//각각의 단어를 get한다 위에 나온 것과 동일한 for문의 구조이다.
            int index2 = list.indexOf(alphabet2);//알파벳 리스트에 저장된 알파벳의 값을 뽑아낸다
            index2 = (index2 + index)%list.size();//만약 리스트의 총 길이를 초과할 경우를 대비해준다.
            myBuilder.append(list.get(index2));//구한 알파벳을 append해준다.
        }

        return myBuilder.toString();
    }
}

어레이 리스트에 아예 알파벳을 전부 넣고 마치 어렸을떄 알파벳 달력을 이용하는 느낌으로 풀어보았다.주의해야되는 점은 아스키 코드가 자주나온다는 점과 String은 배열이라는점 그리고 배열의 길이를 넘어갔을떄의 예외처리였다.