https://programmers.co.kr/learn/courses/30/lessons/84512
이 모음 사전은 다음과 같은 순서로 단어가 나열된다.
경우의 수를 이용하면 쉽게 해결할 수 있을 것으로 생각했다.
우선, [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 |