일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스스쿨
- BASIC
- 그래프 탐색
- 프로그래머스
- 파이썬
- 문자열
- 자바스크립트
- CSS
- 백준
- 그리디 알고리즘
- programmers
- 그래프이론
- 스택
- 그래프 이론
- DP
- lv2
- 너비 우선 탐색
- DFS
- JavaScript
- level2
- 알고리즘
- web
- 브루트포스 알고리즘
- 웹 프론트엔드
- BFS
- 딕셔너리
- 다이나믹 프로그래밍
- 구현
- 정렬
- 자료구조
Archives
- Today
- Total
DevLog:-)
[프로그래머스][Javascript]모음사전 본문
반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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함수를 사용해 각각의 요소에 대한 변환값을 누적한다. |
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Javascript]프로세스 (0) | 2023.08.15 |
---|---|
[프로그래머스][JavaScript]JadenCase 문자열 만들기 (0) | 2023.08.13 |
[프로그래머스][Javascript]멀리뛰기 (0) | 2023.08.04 |
[프로그래머스][Javascript]타겟 넘버 (0) | 2023.08.01 |
[프로그래머스][Javascript]소수찾기 (0) | 2023.07.29 |