알고리즘/프로그래머스 - JS

[프로그래머스] level.2 모음사전

개발자성장기 2023. 6. 29. 11:14
반응형

 

 

프로그래머스

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

programmers.co.kr

 


나의 풀이 

뭔가 확실한 방법이 생각나지 않아 나열하면서 풀어야겠다고 마음먹었습니다.  

그리고 나열하다 규칙성이 나오면 미루어 짐작해서 계산하면 된다고 생각했습니다. 

 

이 풀이의 핵심은 각 자리의 문자들의 숫자를 다 더한게 순서를 나타낸다는 것입니다. 

예를들어 

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)   
}

 

 

반응형