1. 문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
2. 제한 사항
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
3. 입출력 예제
word | result |
"AAAAE" | 6 |
"AAAE" | 10 |
"I" | 1563 |
"EIO" | 1189 |
4. 나의 접근 방식
- 가장 청음에 나올 'A' 부터 입력받은 word까지 모든 경우의 수를 배열에 담는다.
- 사전의 규칙처럼, 한 모음을 돌고 나면 가장 마지막 앞의 모음이 다음 모음으로 바뀌고 가장 끝의 모음이 다시 변경되면서 모든 모음을 넣는 규칙이 있다.
- 이를 통해 모든 순서를 배열에 담을 수 있다.
5. 결과
function solution(word) {
let result = [];
let words = ["A", "E", "I", "O", "U"];
// 깊이를 계산할 함수를 선언한다.
const getWord = (cur, depth) => {
// 길이가 6이라면
if (depth === 6) return;
// 나온 모음의 묶음을 result에 넣는다.
result.push(cur);
// 반복문을 돌면서
for (let i = 0; i < words.length; i++) {
// 나온 모음에 다음 모음을 추가하면서 깊이를 더 해 준다.
getWord(cur + words[i], depth + 1);
}
};
// 이 과정을 word에서 받은 모음까지의 모든 모음의 묶음을 구한다.
words.map((word) => getWord(word, 1));
// 만들어진 모든 순서에 indexOf로 해당하는 모음을 찾아서
// 0번째 부터 이기 떄문에 + 1 한다.
return result.indexOf(word) + 1;
}
6. 개선점이 있다면?
- 모든 경우의 수를 구한다는 것이 효율성이 매우 떨어진다. 더 간단하게 패턴을 이용해 풀 수는 없을까?
- DFS를 이용하여 푸는 방식이 있다는데 찾아볼 필요가 있다.
- 자료구조에 대한 자유로운 사용이 선행 되어야 더 쉽게 적용하고 풀 수 있을 것이다.
'Coding > Today I Learned' 카테고리의 다른 글
2022.02.21(Mon.)<프로그래머스 짝지어 제거하기 문제 풀이> (0) | 2022.02.21 |
---|---|
2022.02.20(Sun.) <프로그래머스 구명보트 문제 풀이> (0) | 2022.02.20 |
2022.02.18(Fri) <프로그래머스 124 나라의 숫자 문제 풀이> (0) | 2022.02.18 |
2022.02.17(Thu.) <프로그래머스 타겟 넘버 문제 풀이> (0) | 2022.02.17 |
2022.02.15(Tue.) <프로그래머스 가장 큰 수 문제 풀이> (0) | 2022.02.15 |