

<풀기 전 생각>
해당 문제의 핵심은 알파뱃 순서를 바탕으로 해당 문자열의 원소들을 바꿀 수 있냐는 것 이고
실제 아스키 코드의 문자는 알파벳 순서대로 정렬이 되어 있으므로 해당 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 |