<풀기 전 생각>

해당 문제의 핵심은 알파뱃 순서를 바탕으로 해당 문자열의 원소들을 바꿀 수 있냐는 것 이고

실제 아스키 코드의 문자는 알파벳 순서대로 정렬이 되어 있으므로 해당 char 문자형을 이용하는 생각을 할 수 있었다.

추가로 두 문자열의 각 알파벳 하나씩에 접근 해야 하므로 toCharArray()를 사용하는 것이 제일 좋겠다는 판단을 했고 

만약 s의 문자가 skip에 해당되는 문자임은 단순 반복문을 사용해 빼면 된다고 생각하여 문제 풀이에 들어갔다.

 

<최종 코드>

class Solution {
    // 시간 복잡도 O(n^2) 공간 복잡도 O(n)
    public boolean isSkip(char skipArray[],char input){
        for (char c: skipArray) {
            if(input==c)
                return true;
        }
        return false;
    }
    public String solution(String s, String skip, int index) {
        StringBuilder answer = new StringBuilder("");
        char sArray[] = s.toCharArray();
        char skipArray[] = skip.toCharArray();

        for (char sApa: sArray) {
            for(int i=0;i<index;i++){
                if(sApa=='z')
                    sApa='a'-1;
                sApa++;
                if(isSkip(skipArray,sApa))
                    i--;
            }
            answer.append(sApa);
        }
        return answer.toString();
    }
}

<메모>

우수 풀이를 보니 String 클래스에는 contains(String) 라는 메서드가 존재하고 해당 함수의 시간 복잡도는 O(nm) 임으로

(n은 문자열의 길이 m은 찾고자 하는 문자열의 길이) 다음 부터 한 글자를 가지고 있는지 판단 할 때는 반복문을 사용하기 보다는 해당 함수를 사용하는 것이 훨씬 가독성이 좋아 질 것 같다.

 

!skip.contains(String.valueOf(temp))

'PS > Level1' 카테고리의 다른 글

당구 연습  (1) 2023.03.18
대충 만든 자판  (0) 2023.02.26
자연수를 뒤집어 배열로 만들기  (0) 2023.02.18
크레인 인형뽑기 게임  (0) 2023.02.06
로또의 최고 순위와 최저 순위  (3) 2023.02.04

+ Recent posts