-
[프로그래머스] 모음 사전 js 풀이프로그래머스 2022. 2. 5. 13:01
문제
https://programmers.co.kr/learn/courses/30/lessons/84512
한 칸에 올 수 있는 문자의 수는 총 5개입니다.
위의 사진에서 맨 끝에 올 수 있는 개수는 5개임을 알 수 있습니다.
하지만 AAAA에서 AAAE로 네 번째 칸이 변하는데 필요한 수는 6입니다. 맨끝은 5개가 필요하지만 네번째 자리 수 까지 변화시키려면 1을 추가로 더해야 합니다. 즉 6이 필요한 것이죠.
그렇다면 우리는 가정에 힘을 실어주기 위해 한번 더 테스트해봅니다.
여기까지 하고, 규칙을 한번 찾아보겠습니다.
AAAA = 4+0 = 4
AAAE = 4+6 = 10
AAAI = 4+6+6 = 10
둘째 자릿수가 바뀌는데 필요한 수는 6인 것을 알 수 있습니다.
그렇다면 셋째 자릿수가 변화하는데 필요한 수는 몇 개일까요?
AAA에서 AAE로 가는 경우를 생각해봅시다.
1. AAAA에서 AAE까지는 총 6*5 = 30의 경우의 수이다.
2. 그렇다면 AAA에서 AAAA로 가는 1만을 더해주면 됩니다.
이제 규칙을 배열로 나타내 보겠습니다.
const plus = [?, ?, ?, 1*5+1, 1]; const plus = [?, ?, 6*5+1, 6, 1]; const plus = [?, 31*5+1, 31, 6, 1]; const plus = [156*5+1, 156, 31, 6, 1]; const plus = [781, 156, 31, 6, 1];
위와 같은 규칙으로 되는 것을 알 수 있습니다.
그렇다면 자릿수만큼 위의 수를 곱해주면 되는 걸까요?
AAAE는 10입니다. 즉, AAAA에서 AAAE로 바뀌는 6과 AAAA의 4를 더한 10입니다.
또한 AE는 AA에서 AE로 바뀌는 156과 AAA의 2를 더한 158입니다.
즉 해당 문자의 자릿수까지 더해주어야 합니다.
풀이
function solution(word) { const obj = { A: 0, E: 1, I: 2, O: 3, U: 4, }; const plus = [781, 156, 31, 6, 1]; return word .split("") .reduce((acc, ch, idx) => acc + obj[ch] * plus[idx] + 1, 0); } console.log(solution("EIO"));
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 3차 압축 js 풀이 (0) 2022.02.18 [프로그래머스] 프렌즈4블록 js 풀이 (0) 2022.01.26