안녕하세요
프로그래머스 JS [모음 사전] 본문
모음 사전 문제보기
문제 설명
입출력 예wordresult
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
입출력 예wordresult
"AAAAE" | 6 |
"AAAE" | 10 |
"I" | 1563 |
"EIO" | 1189 |
재귀를 쓰는 방법을 여전히 잘 모르겠다... 재귀를 쓰기는 했지만 사실상 while 반복문의 continue랑 별반 차이가 없다. 안 풀리는 문제 계속 붙잡기보다는 여러 문제를 접한 뒤에 이후에 부족한 부분에 대해서 집중 공략하기로 하자. |
function solution(word) {
const vowel = {
A: "E",
E: "I",
I: "O",
O: "U",
};
const c = ["A"];
let count = 0;
const dfs = (wordArray, word) => {
count++;
// 문자와 일치하면 count 반환
if (wordArray.join("") === word) return count;
// 문자열의 길이가 5보다 작으면 A를 더하기
if (wordArray.length < 5) {
wordArray.push("A");
dfs(wordArray, word);
return;
}
// 마지막 문자열이 U가 아니라면 문자 변환 순서에 따라 변환
if (wordArray[4] !== "U") {
wordArray[4] = vowel[c[4]];
dfs(wordArray, word);
return;
}
// 변환 규칙에 따라 U 앞의 문자열 변환하기
for (let i = wordArray.length - 1; i > 0; i--) {
if (wordArray[i - 1] !== "U" && wordArray.slice(i).join("") === "U".repeat(wordArray.length - i)) {
wordArray[i - 1] = vowel[wordArray[i - 1]];
// 변환 뒤에는 U 제거하기
for (let j = 0; j < 5 - i; j++) {
wordArray.pop();
}
dfs(wordArray, word);
break;
}
}
};
dfs(c, word);
console.log(count, c.join(""), "count");
return count;
}
solution("I");
|
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [게임 맵 최단거리]⭐ BFS/큐/최단거리 (0) | 2022.12.05 |
---|---|
프로그래머스 JS [연속 부분 수열 합의 개수] (0) | 2022.12.05 |
프로그래머스 JS [파일명 정렬]✅ isNaN 판별시 type 명확하게 명시 (0) | 2022.12.04 |
프로그래머스 JS [방문 길이] (0) | 2022.12.03 |
프로그래머스 JS [땅따먹기]⭐⭐⭐DP(다이나믹 프로그래밍) (0) | 2022.12.03 |