Problem
Solution
소문자로만 이루어진 문자열이 s로 주어지고 index 만큼 밀어주는데 skip에 있는 알파벳은 제외하고 건너뛴 다음 최종적인 String을 반환해 주면 되는 문제이다.
1. s 를 char로 변환한다.
2. 변환된 char을 한번 밀어준 후 z보다 큰지 비교 후 z보다 클 시 알파벳의 개수만큼 26을 뺀 후 a로 만든다.
3. skip에 포함되어 있는지 체크해 준다.
3 - 1. 만약 포함되어 있으면 카운트를 시키지 않고 다시 한번 밀어준다.
3 - 2. 포함되어 있지 않으면 카운트를 시키고 index 범위만큼 2번과 3번을 반복한다.
4. 2번째 for 문을 나온 char을 answer에 저장한다.
5. 이렇게 s의 범위만큼 1 ~ 4번을 반복하면 답이 나온다.
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
for(int i = 0; i < s.length(); i++) {
char temp = s.charAt(i);
for(int j = 0; j < index; j++) {
temp++;
if(temp > 'z') {
temp -= 26;
}
if(skip.contains(String.valueOf(temp))) {
j--;
}
}
answer += String.valueOf(temp);
}
return answer;
}
}
마치며
위 코드의 시간 복잡도는 O(n * k)으로 다른 사람의 코드를 확인해 보니 O(n)의 코드로 가능한 것을 알 수 있었다. 나중에 O(n)으로 만들어보는 연습을 해봐야겠다! 가르침은 댓글로 언제든지 환영합니다 ~
반응형
'백준 Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 나누기 Java 풀이 (0) | 2023.03.15 |
---|---|
[프로그래머스] 대충 만든 자판 Java 풀이 (2) | 2023.03.13 |
[LeetCode - Data Structure II] 15. 3Sum (0) | 2022.11.10 |
[LeetCode - Data Structure II] 169. Majority Element (0) | 2022.11.08 |
[LeetCode - Data Structure II] 136. Single Number (0) | 2022.11.06 |