programmers

[Programmers Level 2] 모음사전 Javascript

2023. 3. 24. 23:48
목차
  1. ⚡문제정보
  2. 🔍접근방법
  3. 😑나의 풀이라기보단 GPT의 풀이에 가까운

⚡문제정보

역시 완전 탐색 문제입니다.

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
  1. ⚡문제정보
  2. 🔍접근방법
  3. 😑나의 풀이라기보단 GPT의 풀이에 가까운
'programmers' 카테고리의 다른 글
  • [Programmers Level 1] 대충 만든 자판 Javascript
  • [Programmers Level 2] 피로도 Javascript
  • [Programmers Level 1] 덧칠하기 Javascript
  • [Programmers Level 1] 바탕화면 정리 Javascript
냠냠맨
냠냠맨
프론트엔드 개발 전반을 다루는 기술 블로그입니다.
냠냠맨
React와 TypeScript를 좋아하는 개발자
냠냠맨
전체
오늘
어제
  • all category (434)
    • CMC (0)
    • best (11)
    • 년간회고 (1)
    • cheetsheet (15)
    • 프로젝트 회고 (3)
    • 서평 (3)
    • SEO Study (1)
    • 프로젝트 진행기 (10)
    • testcode (9)
    • yarnberry (7)
    • css (21)
    • typescript (15)
    • redux (7)
    • react (43)
    • Next.js (9)
    • Nestjs (3)
    • javascript (44)
    • programmers (67)
    • leetcode (41)
    • frontend (41)
    • backjoon (1)
    • Next.js Beta Docs 번역 (12)
    • TIL (15)
      • html (3)
    • Network (12)
      • 간단 정리 시리즈 (2)
      • 질답 준비 (0)
    • 자료구조와 알고리즘 (2)
    • CS (4)
      • OS (1)
    • 취업준비 (2)
    • zoom websocket (2)
    • talk (6)
    • 면접대비 (1)
    • 코드스테이츠 프론트 (5)
    • 간헐적 회고 (18)

블로그 메뉴

  • leetcode
  • programmers
  • javascript
  • html
  • css

공지사항

인기 글

태그

  • 테오의스프린트17기
  • 코드스테이츠 #프론트엔드
  • border말풍선
  • 개발자
  • 주니어개발자
  • LeetCode
  • CSS
  • teosprint
  • 말풍선
  • frontend
  • JavaScript
  • 프론트엔드
  • 개발
  • 테오의스프린트

최근 댓글

최근 글

hELLO · Designed By 정상우.
냠냠맨
[Programmers Level 2] 모음사전 Javascript
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.