nukw0n
찐이의 개발 연결구과
nukw0n
전체 방문자
오늘
어제
  • 분류 전체보기 (38)
    • 유연해지기 (21)
      • React.js (11)
      • Javascript (5)
      • webpack & babel (1)
      • etc. (4)
      • Next.js (0)
    • 단단해지기 (13)
      • Algorithm (9)
      • Computer Science (4)
    • 속닥속닥 (4)
    • 책읽는 남자 (0)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 알고리즘
    • React
    • vanilla spa
    • React 18
    • history API
    • bfs
    • vallia 라우터
    • useBuiltIns
    • Batching
    • 백준
    • Auto Batching
    • Error Boundary
    • error 안 뜸
    • 프로그래머스
    • sass vs postcss
    • 콜백 ref
    • intersectionobserver api
    • fallback UI
    • dfs
    • javascript

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    nukw0n

    찐이의 개발 연결구과

    [프로그래머스]  모음사전 Javascript
    단단해지기/Algorithm

    [프로그래머스] 모음사전 Javascript

    2021. 9. 18. 14:51

     

    https://programmers.co.kr/learn/courses/30/lessons/84512

     

    코딩테스트 연습 - 5주차_모음사전

    사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니

    programmers.co.kr

     

    이 모음 사전은 다음과 같은 순서로 단어가 나열된다.

    경우의 수를 이용하면 쉽게 해결할 수 있을 것으로 생각했다.


    우선, [A, E, I, O, U] 라는 배열을 만들었다.
    항상 이 순서대로 단어가 나타나므로 이 배열의 인덱스 를 활용해 몇 번째 단어인지 유추할 수 있다.

    A로 시작하는 단어는 총 몇개일까?

    A _ _ _ _ :

    • 길이가 1인 단어: 1개
    • 길이가 2인 단어: 5개
    • 길이가 3인 단어: 5^2개
    • 길이가 4인 단어: 5^3개
    • 길이가 5인 단어: 5^4개

    총 781개이다.

    이를 통해 단어가 나타나는 위치를 알아보자.


    1. I는 몇 번째 단어일까?

    781*2 + 1 = 1563번째임을 알 수 있다.

    2. EIO는 몇 번째 단어일까?

    • E _ _ _ _ : 781(= E _ _ _ _ 보다 앞에 있는 길이가 5인 단어들의 개수) * 1(= 배열에서 E의 인덱스) + 1
    • I _ _ _ : 156(= I _ _ _ 보다 앞에 있는 길이가 4인 단어들의 개수) * 2(= 배열에서 I의 인덱스) + 1
    • O _ _ : 31(= O _ _ 보다 앞에 있는 길이가 3인 단어들의 개수) * 3(= 배열에서 O의 인덱스) + 1

    EIO는 1189번째임을 알 수 있다.

     

    위 로직을 코드로 나타내면 다음과 같다.

    function sumSquare(idx) {
        let sum = 0;
        for(let i = idx; i>=0; i-=1) { 
            sum += 5**i;
        }
        return sum;
    }
    
    function solution(word) {
        let answer = 0;
        const aeiou = { 'A': 0, 'E': 1, 'I': 2, 'O': 3, 'U': 4 };
    
        [...word].forEach((w, idx) => {
            const val = aeiou[w];
            answer += val * sumSquare(4-idx) + 1;
        })
    
    
        return answer;
    }

    '단단해지기 > Algorithm' 카테고리의 다른 글

    [프로그래머스] 입실 퇴실 Javascript  (0) 2021.09.19
    [프로그래머스] 복서 정렬하기 Javascript  (0) 2021.09.18
    [백준/BOJ 알고리즘] 17845 수강 과목 C++  (0) 2021.09.12
    [백준/BOJ 알고리즘] 10830 행렬 제곱 C++  (0) 2021.09.12
    [백준/BOJ 알고리즘] 16236 아기상어 C++  (0) 2020.09.17
      '단단해지기/Algorithm' 카테고리의 다른 글
      • [프로그래머스] 입실 퇴실 Javascript
      • [프로그래머스] 복서 정렬하기 Javascript
      • [백준/BOJ 알고리즘] 17845 수강 과목 C++
      • [백준/BOJ 알고리즘] 10830 행렬 제곱 C++
      nukw0n
      nukw0n
      프론트엔드 개발자 권혁진입니다.

      티스토리툴바