나의 풀이
뭔가 확실한 방법이 생각나지 않아 나열하면서 풀어야겠다고 마음먹었습니다.
그리고 나열하다 규칙성이 나오면 미루어 짐작해서 계산하면 된다고 생각했습니다.
이 풀이의 핵심은 각 자리의 문자들의 숫자를 다 더한게 순서를 나타낸다는 것입니다.
예를들어
A = 1 순서 1
AA = 1 + 1 순서 2
AAA = 1 + 1 + 1 순서 3
AAAA = 1 + 1 + 1 + 1 순서 4
AAAAA = 1 + 1 + 1 + 1 + 1 순서 5
AAAAE = 1 + 1 + 1 + 1 + 2 순서 6
여기까지 보면 첫 번째, 두 번째 , 세 번째, 네 번째, 다섯 번째 A는 전부 1이라는 것을 알 수있고
다섯 번째 자리에 있는 'E'는 2라는 것을 알 수 있습니다.
word result 순서
A 1 1
AA 1 1 2
AAA 1 1 1 3
AAAA 1 1 1 1 4
AAAAA 1 1 1 1 1 5
AAAAE 1 1 1 1 2 6
AAAAI 1 1 1 1 3 7
AAAAO 1 1 1 1 4 8
AAAAU 1 1 1 1 5 9
AAAE 1 1 1 7 10
AAAEA 1 1 1 7 1 11
AAAEE 1 1 1 7 2 12
AAAEI 1 1 1 7 3 13
AAAEO 1 1 1 7 4 14
AAAEU 1 1 1 7 5 15
일단 여기까지보면 맨 뒷자리(다섯 번째 자리)의 규칙성이 보입니다.
A : 1
E : 2
I : 3
O : 4
U : 5
그리고 각 1씩 차이가납니다.
이제 네 번째 자리의 규칙성을 파악하면 됩니다.
AAAEO 1 1 1 7 4 14
AAAEU 1 1 1 7 5 15
AAAI 1 1 1 13 16 (16번째 순서가 되기 위해서는 네 번째 자리 I가 13이 되어야 성립합니다.)
여기까지 보면 네 번째 자리의 규칙성도 보입니다.
A : 1
E : 7
I : 13
이렇게 6씩 차이가 납니다.
그럼
O : 19
U : 25 가됩니다.
그렇다면 세 번째 자리의 규칙성은 어떻게 찾을까?
바로 세 번째 자리의 알파벳이 바뀌는 지점으로 이동하면됩니다.
AAAU 1 1 1 25 28 ( 이전에 U : 25라는 것을 알았기 때문에 대입만 해주시면 됩니다.)
...
AAAUU 1 1 1 25 5 33 (이전에 네 번째 자리 U = 25, 다섯 번째 자리 U =5라는 것을 알았습니다.)
AAE 1 1 32 34 (순서가 34이 되기위해서 세 번째 자리 E는 32가 되어야 합니다.)
이제 세 번째 자리의 규칙성도 미루어 알 수 있습니다.
A : 1
E : 32 ( 31 차이가 납니다.)
I : 63
O : 94
U : 125
그리고 이제 두 번째 자리의 규칙성을 알아야합니다.
그래서 바로 두 번째 자리의 알파벳이 바뀔 때를 보면 됩니다.
AAUUU 1 1 125 25 5 157
AE 1 157 158 158
이제 두번째 자리의 규칙성도 미루어 알 수 있습니다.
A : 1
E : 157 ( 156 차이가 난다.)
I : 313
O : 469
U : 625
그리고 마지막으로 첫번째 자리의 규칙성만 알면 끝입니다.
AUUUU 1 625 125 25 5 781 (이미 우리는 두 번째 자리 U, 세 번째자리 U, ...등 다 알고 있습니다.)
E 782 782
이제 첫번째 자리의 규칙성도 미루어 알 수 있습니다.
A : 1
E : 782 (781 차이가 난다.)
I : 1563 (예제에서 알려줌)
O : 2344
U : 3125
이렇게 다 알게되었으면 아래 코드와 같이 표현하면 끝입니다.
function solution(word) {
const first = {
A : 1,
E : 782,
I : 1563,
O : 2344,
U : 3125
}
const second = {
A: 1,
E: 157,
I: 313,
O: 469,
U: 625
}
const third = {
A: 1,
E: 32,
I: 63,
O: 94,
U: 125
}
const fourth = {
A: 1,
E: 7,
I: 13,
O: 19,
U: 25
}
const last = {
A: 1,
E: 2,
I: 3,
O: 4,
U: 5
}
const order = [first, second, third, fourth, last]
return [...word].reduce((acc, letter, index) => {
acc += order[index][letter]
return acc
},0)
}
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스 - JS] level.2 파일명 정렬 📌⭐️ (0) | 2023.07.02 |
---|---|
[프로그래머스] level.2 영어 끝말잇기 (0) | 2023.06.30 |
[프로그래머스-JS] level.2 스킬 트리 (0) | 2023.06.28 |
[프로그래머스] level.2 방문 길이 (0) | 2023.06.28 |
[프로그래머스 - JS,PYTHON] level.3 정수 삼각형 (0) | 2023.06.21 |