링크: https://programmers.co.kr/learn/courses/30/lessons/84512
문제 설명
사전에 알파벳 모음 ‘A’, ‘E’, ‘I’, ‘O’, ‘U’만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 “A”이고, 그다음은 “AA”이며, 마지막 단어는 “UUUUU”입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항
word의 길이는 1 이상 5 이하입니다.
word는 알파벳 대문자 ‘A’, ‘E’, ‘I’, ‘O’, ‘U’로만 이루어져 있습니다.
아이디어
이 문제를 보고나서 분명 수학적 관계가 있을거라고는 생각했다.
하지만 그 규칙을 찾는것이 어려웠기 때문에 완전 탐색으로 풀기로 했다.
풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| const alphabet = ['A', 'E', 'I', 'O', 'U'] const wordIndex = [0, 0, 0, 0, 0, 0] let wordLength = 0 let index = 1 const concat = []
function find(findWord) { while (wordIndex[0] !== 1) { if (wordLength === 5) { while (wordIndex[wordLength] === 4) { wordIndex[wordLength] = 0 wordLength-- concat.pop() } wordIndex[wordLength]++ concat.pop() concat.push(alphabet[wordIndex[wordLength]]) } else { concat.push(alphabet[wordIndex[++wordLength]]) }
if (concat.join('') === findWord) { return index } else { index++ } } }
function solution(word) { return find(word) }
|
그냥 A, AA, AAA, …, UUUUU 까지 전부 대조해보는 방식이다.
경우의 수가 얼마 없기 때문에 시간 복잡도는 크지 않다.
다른 사람의 풀이를 확인해보니 역시 수식으로 풀 수 있는 방법이 있더라…
Author:
JeHwanYoo
License:
Copyright (c) 2022 CC-BY-NC-4.0 LICENSE