728x90
문제 설명
주어진 문자열 s의 각 문자에 대해 index만큼 뒤의 알파벳으로 변경하는 규칙을 따릅니다. 단, 특정 문자들은 skip 목록에 포함되어 있으며, 이 문자들은 건너뛰고 세어야 합니다. z를 넘어갈 경우 다시 a부터 순환합니다.
제한 사항
- s의 길이는 5 이상 50 이하입니다.
- skip의 길이는 1 이상 10 이하이며, 소문자로만 구성됩니다.
- s와 skip은 중복되지 않는 소문자로만 이루어져 있습니다.
- index는 1 이상 20 이하입니다.
해결 방법
알고리즘: 문자열 처리, 리스트 순환
- skip에 포함되지 않은 유효한 알파벳 목록을 생성합니다.
- 문자열 s의 각 문자에 대해 유효한 알파벳 목록에서의 위치를 찾습니다.
- index만큼 이동한 위치의 문자를 결과 문자열에 추가합니다.
- 이동 시 리스트 순환을 고려하여 modulo 연산을 활용합니다.
시간 복잡도
- O(NM) (N: 문자열 길이, M: 유효한 알파벳 수)
각 문자를 탐색하고 리스트에서의 인덱스를 찾는 과정이 포함되므로 O(NM)의 시간 복잡도를 가집니다.
구현 코드
function solution(s, skip, index) {
let answer = "";
let skipSet = new Set(skip);
let validChars = [];
for (let i = 0; i < 26; i++) {
let char = String.fromCharCode(i + 97);
if (!skipSet.has(char)) validChars.push(char);
}
for (let c of s) {
let idx = validChars.indexOf(c);
let newIdx = (idx + index) % validChars.length;
answer += validChars[newIdx];
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 푸드 파이트 대회 (0) | 2025.02.03 |
---|---|
[Javascript] 프로그래머스 - 문자열 나누기 (0) | 2025.02.03 |
[Javascript] 프로그래머스 - 올바른 괄호 갯수 (1) | 2025.02.02 |
[Javascript] 프로그래머스 - 네트워크 (0) | 2025.02.02 |
[Javascript] 프로그래머스 - 길 찾기 게임 (0) | 2025.02.02 |