DevLog:-)

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

알고리즘/프로그래머스

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

hyeon200 2023. 8. 5. 18:36
반응형

문제

모음사전

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

function solution(word) {
    var answer = 0;
    let arr=[];
    let li = ['A','E','I','O','U'];
    let result;
    
    function dfs(i,n,arr){
        answer++;
        if(arr == word){result=answer;}
        if(n>4){return;}
        for(let j of li){
            dfs(j,n+1,arr+j);
            i++;
        }
    }
    
    for(let i of li){
        dfs(i,1,i);
    }
    return result;
}

dfs를 이용한 구현 했다.

-주어진 알페벳으로 만들 수 있는 단어의 조합을 모두 순회하는 문제 문제이기 때문에 dfs사용했다. 
-사전순서(A, E, I, O, U)가 담긴 배열을 만들고 for문을 돌리면서 dfs를 호출하도록 작성했다.

-단어의 길이가 5가 되었을 때를  함수 종료 조건으로 두었다.

 

 

📖다른 풀이 

function solution(words) {
    return words.split('').reduce((r, c, i) => r + [781, 156, 31, 6, 1][i] * ['A', 'E', 'I', 'O', 'U'].indexOf(c) + 1, 0);
}

수학적인 방법을 이용한 다른 분의 코드이다. 매우 충격이다..🌟😮

 

1.words를 split메서드를 사용하여 문자열 배열을 개별 문자로 분할한다. (문자열 -> 배열)

2. r + [781, 156, 31, 6, 1][i] * ['A', 'E', 'I', 'O', 'U']. indexOf(c) + 1

    -> 각 문자에 대한 변환 값을 계산하고 누적값에 추가한다. 

  •  i를 기반으로 미리 정의된 계수 배열 [781, 156, 31, 6, 1]에서 해당 문자의 변환 값을 가져온다.
  •  해당 문자가 'A', 'E', 'I', 'O', 'U' 중 어느 것인지 확인하고 해당 모음의 인덱스에 따른 값을 곱한 후 누적값에 더한다.

 

+781, 156, 31, 6, 1은 각각 'A', 'E', 'I', 'O', 'U' 다섯 개의 모음 문자에 대한 변환 가중치이다.

+등비수열의 합을 이용해 가중치를 구한 코드

function solution(word) {
    return word.split('')
            .reduce((a,b,i) => a + ('AEIOU'.indexOf(b)) * (5**(5 - i) - 1) / 4 + 1, 0)
}

 

 

 

checkpoint!

str.split('') 문자열을 특정 구분자를 기준으로 분리하는 메서드이다.
(문자열 -> 배열)변
reduce란? 배열의 각 요소에 대해 주어진 함수를 실행하고 하나의 값으로 축소시키는 함수 이다. ex)누적합
reduce((r,c,i)=>r+c,0) r:누적값
c: 현재 요소
i: 현재 인덱스

 

💡idea요약

dfs구현(재귀 함수) -주어진 알페벳으로 만들 수 있는 단어의 조합을 모두 순회하는 문제 문제 -> dfs사용 
-사전순서(A,E,I,O,U)가 단김 배열을 만들고 for문을 돌리면서 dfs를 호출하도록 작성했다. 
수학적 구현 -등비수열의 합을 통해 가중치를 계산 한다.
-주어진 단어를 배열로 변환 후 reduce함수를 사용해 각각의 요소에 대한 변환값을 누적한다.
반응형