코딩테스트 연습/프로그래머스

[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 모음사전

슈퍼짱짱 2023. 1. 26. 13:23
반응형

[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 모음사전

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

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

programmers.co.kr

 


 

Solution

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= dict()
d['A'= 0
d['E'= 1
d['I'= 2
d['O'= 3
d['U'= 4
    
def solution(word):
    if len(word) < 5 : 
        word = word + "0"*(5-len(word))
        
    word = word[::-1]
    answer = 0
    
    for i in range(5) :
        if word[i] == "0" :
            next
        else :
            answer = answer + sum([5**for j in range(1,i+1)])*d[word[i]] + d[word[i]] + 1
    return answer
cs

 

첫 번째 자리가 "A"인 경우의 수는 총 780개이다.

즉, 1번부터 781번까지 A _ _ _ _ 인 경우이다.

 

780이라는 숫자는 $ 5^4 + 5^3 + 5^2 + 5^1 $ 로 계산된다.

word가 다섯자리인 경우 첫 번째 자리를 제외한 나머지 네 자리에 각각 5개의 경우의 수가 올 수 있으므로 $ 5^4 $ ,

word가 네 자리인 경우 첫 번째 자리를 제외한 나머지 세 자리에 각각 5개의 경우의 수가 올 수 있으므로 $ 5^3 $ ,

...

으로 계산된다.

 

마찬가지로 첫 번째 자리가 "E"인 경우의 수도 총 780개이며,

780+2 ~ 780*2+2 번 까지 E _ _ _ _ 인 경우이다.

 

나머지도 같은 방식이며 이를 정리하면

첫 번째 자리가 

A인 경우 1 (= $(5^4 + 5^3 + 5^2 + 5^1)*0 + 0 + 1$) 번 부터

E인 경우 780 + 1 + 1 (= $(5^4 + 5^3 + 5^2 + 5^1)*1 + 1 + 1$) 번 부터

I인 경우 780*2 + 2 + 1 (= $(5^4 + 5^3 + 5^2 + 5^1)*2 + 2 + 1$) 번 부터 

O인 경우 780*3 + 3 + 1 (= $(5^4 + 5^3 + 5^2 + 5^1)*3 + 3 + 1$) 번 부터

U인 경우 780*4 + 4 + 1 (= $(5^4 + 5^3 + 5^2 + 5^1)*4 + 4 + 1$) 번 부터 시작된다.

 

마찬가지로 두 번째 자리가 A, E, I, O, U인 경우는 각각 155( = $ 5^3 + 5^2 + 5^1 $)개씩 있다.

첫 번째 자리 시작 번호가 n이라 했을 때,

두 번째 자리가 

A인 경우는 n + ($ (5^3 + 5^2 + 5^1) * 0 + 0 + 1 $)

E인 경우는 n + ($ (5^3 + 5^2 + 5^1) * 1 + 1 + 1 $)

I인 경우는 n + ($ (5^3 + 5^2 + 5^1) * 2 + 2 + 1 $)

O인 경우는 n + ($ (5^3 + 5^2 + 5^1) * 3 + 3 + 1 $)

U인 경우는 n + ($ (5^3 + 5^2 + 5^1) * 4 + 4 + 1 $)

 

세 번째 자리는 각각 각각 30( $ = 5^2 + 5^1$)개씩 있으며 위와 같이 반복된다.

 

규칙을 보면 A는 0을 곱하고 0을 더하고,

E는 1을 곱하고 1을 더하고,

I는 2를 곱하고 2를 더하고, ...

 

따라서 맨 처음 d에 A는 0을, E는 1을, ..., U는 4를 가진 dictionary를 만들어주고 이를 활용한다.

 


다른 사람의 풀이

 

 

풀이 방법은 나와 같으나, for문을 이용하지 않고 등비수열의 합 식을 활용했다.

또, dictionary 대신 "AEIOU".index(n)을 활용했다.

반응형