728x90
문제 설명
알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어가 사전에 정렬되어 있습니다. 예를 들어, 첫 번째 단어는 "A", 두 번째 단어는 "AA", 마지막 단어는 "UUUUU"입니다. 주어진 단어 word가 사전에서 몇 번째 단어인지 찾는 함수를 구현해야 합니다.
제한 사항
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
해결 방법
알고리즘: DFS(깊이 우선 탐색)
- 사전에 나올 수 있는 단어를 DFS를 이용해 순차적으로 생성하면서 탐색합니다.
- DFS를 수행하며 단어를 만들고, 카운트를 증가시킵니다.
- 생성한 단어가 word와 일치하면 현재 카운트 값을 반환합니다.
- 단어의 길이가 5가 되면 더 이상 탐색하지 않습니다.
- DFS의 백트래킹을 활용하여 모든 가능한 단어를 순회하며 word의 위치를 찾습니다.
시간 복잡도
DFS를 사용하여 가능한 모든 단어를 탐색하며, 각 자리에서 N=5 개의 알파벳 중 하나를 선택합니다.
단어의 최대 길이가 M=5 이므로, 최악의 경우 모든 단어를 생성해야 하며, 이는 O(N^M) = O(5^5) = O(3125) 의 시간 복잡도를 가집니다.
구현 코드
function solution(word) {
const chars = ["A", "E", "I", "O", "U"];
let count = 0;
function dfs(str) {
if (str === word) return count;
if (str.length === 5) return null;
for (let i = 0; i < 5; i++) {
count++;
const result = dfs(str + chars[i]);
if (result !== null) return result;
}
return null;
}
return dfs("");
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 구명보트 (0) | 2025.02.01 |
---|---|
[Javascript] 프로그래머스 - 단어 변환 (1) | 2025.01.31 |
[Javascript] 프로그래머스 - 시소 짝꿍 (1) | 2025.01.31 |
[Javascript] 프로그래머스 - 숫자 변환하기 (0) | 2025.01.31 |
[Javascript] 프로그래머스 - 수식 복원하기 (0) | 2025.01.30 |