⚡문제정보
역시 완전 탐색 문제입니다.
A부터 E까지 순서대로 적혀있는데 단어가 주어지면 그 순서를 맞춰주면 됩니다.
A 1
AA 2
AAA 3
AAAA 4
AAAAA 5
대충 이런흐름으로 올라가는군요 sort()메서드를 통해 서순은 해결해줄 수 있긴한데
재귀적으로... 저 값들을 만들어보고싶습니다.
🔍접근방법
1. 재귀적으로 접근하여 모든 경우의 수를 담은 배열을 만든다.
2. sort 메서드를 이용해 정렬해준다.
3. 정렬된 배열에서 주어진 매개변수와 일치하는 인덱스를 찾는다.
4. 정답
😑나의 풀이라기보단 GPT의 풀이에 가까운
function solution(word) {
let answer = []
let aeiou = ['A','E','I','O','U']
function maker(n,word,words) {
if(n === 0 ) {
words.push(word)
return
}
for(let i=0; i<5; i++) {
maker(n-1, word + aeiou[i] , words)
}
}
for(let i=1; i<=5 ; i++) {
maker(i, '', answer)
}
answer.sort()
return answer.findIndex(ele => ele === word) +1
}
잘 사용하지 않았던..
아니 존재조차 모르고있던 findIndex 메서드를 사용했습니다
샤라웃투 벨로퍼트..
let answer = []
let aeiou = ['A','E','I','O','U']
답 저장할 배열과
필요한 문자열을 담은 배열을 만들어줬습니다.
function maker(n,word,words) {
if(n === 0 ) {
words.push(word)
return
}
for(let i=0; i<5; i++) {
maker(n-1, word + aeiou[i] , words)
}
}
재귀를 돌릴 함수를 만들어줍시다.
이번엔 종료조건이 필요하겠네요
n을 1씩 빼주면서 재귀호출을 하고 n이 0이 되었을때
정답 배열에 push를 해줄것입니다.
원래는 파라미터로 들어간 값은 복사되어서 원본에 영향을 끼쳐선 안되지만
참조 자료형의 경우엔 주소값이 그대로 들어가니까 push해도 문제가 없을것입니다.
for(let i=1; i<=5 ; i++) {
maker(i, '', answer)
}
위 재귀함수의 트리거가 될 for문을 돌려줍니다.
i는 1부터 5까지 돌아가니까
첫 i순회때는 A I E O U가 담기고
두번째 순회엔 두자릿수만큼 알파벳이 차게될것입니다.
[
'A', 'E', 'I', 'O', 'U', 'AA', 'AE', 'AI', 'AO',
'AU', 'EA', 'EE', 'EI', 'EO', 'EU', 'IA', 'IE', 'II',
'IO', 'IU', 'OA', 'OE', 'OI', 'OO', 'OU', 'UA', 'UE',
'UI', 'UO', 'UU', 'AAA', 'AAE', 'AAI', 'AAO', 'AAU', 'AEA',
'AEE', 'AEI', 'AEO', 'AEU', 'AIA', 'AIE', 'AII', 'AIO', 'AIU',
'AOA', 'AOE', 'AOI', 'AOO', 'AOU', 'AUA', 'AUE', 'AUI', 'AUO',
'AUU', 'EAA', 'EAE', 'EAI', 'EAO', 'EAU', 'EEA', 'EEE', 'EEI',
'EEO', 'EEU', 'EIA', 'EIE', 'EII', 'EIO', 'EIU', 'EOA', 'EOE',
'EOI', 'EOO', 'EOU', 'EUA', 'EUE', 'EUI', 'EUO', 'EUU', 'IAA',
'IAE', 'IAI', 'IAO', 'IAU', 'IEA', 'IEE', 'IEI', 'IEO', 'IEU',
'IIA', 'IIE', 'III', 'IIO', 'IIU', 'IOA', 'IOE', 'IOI', 'IOO',
'IOU',
... 3805 more items
]
이렇게요!
조합가능한 모든 문자열을 생성해내는데에는 성공했지만
아직 우리가 원하는 모음순 정렬은 이루어지지 않았습니다.
sort메서드로 정렬을 시도해봅니다.
answer.sort()
[
'A', 'AA', 'AAA', 'AAAA', 'AAAAA', 'AAAAE', 'AAAAI',
'AAAAO', 'AAAAU', 'AAAE', 'AAAEA', 'AAAEE', 'AAAEI', 'AAAEO',
'AAAEU', 'AAAI', 'AAAIA', 'AAAIE', 'AAAII', 'AAAIO', 'AAAIU',
'AAAO', 'AAAOA', 'AAAOE', 'AAAOI', 'AAAOO', 'AAAOU', 'AAAU',
'AAAUA', 'AAAUE', 'AAAUI', 'AAAUO', 'AAAUU', 'AAE', 'AAEA',
'AAEAA', 'AAEAE', 'AAEAI', 'AAEAO', 'AAEAU', 'AAEE', 'AAEEA',
'AAEEE', 'AAEEI', 'AAEEO', 'AAEEU', 'AAEI', 'AAEIA', 'AAEIE',
'AAEII', 'AAEIO', 'AAEIU', 'AAEO', 'AAEOA', 'AAEOE', 'AAEOI',
'AAEOO', 'AAEOU', 'AAEU', 'AAEUA', 'AAEUE', 'AAEUI', 'AAEUO',
'AAEUU', 'AAI', 'AAIA', 'AAIAA', 'AAIAE', 'AAIAI', 'AAIAO',
'AAIAU', 'AAIE', 'AAIEA', 'AAIEE', 'AAIEI', 'AAIEO', 'AAIEU',
'AAII', 'AAIIA', 'AAIIE', 'AAIII', 'AAIIO', 'AAIIU', 'AAIO',
'AAIOA', 'AAIOE', 'AAIOI', 'AAIOO', 'AAIOU', 'AAIU', 'AAIUA',
'AAIUE', 'AAIUI', 'AAIUO', 'AAIUU', 'AAO', 'AAOA', 'AAOAA',
'AAOAE', 'AAOAI',
정렬은 잘되는 것 같네요
return answer.findIndex(ele => ele === word) +1
인덱스를 찾아주고 1을 더해서 반환합니다.
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 1] 대충 만든 자판 Javascript (0) | 2023.03.27 |
---|---|
[Programmers Level 2] 피로도 Javascript (0) | 2023.03.23 |
[Programmers Level 1] 덧칠하기 Javascript (0) | 2023.03.22 |
[Programmers Level 1] 바탕화면 정리 Javascript (0) | 2023.03.05 |
[Programmers Level 2 집합] [1차] 뉴스 클러스터링 Javascript (1) | 2023.01.19 |