[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 모음사전
https://school.programmers.co.kr/learn/courses/30/lessons/84512
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
d = 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**j 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)을 활용했다.
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python - 프로그래머스] 요격시스템 (0) | 2023.06.15 |
---|---|
[Python - 프로그래머스] 코딩테스트 연습 > 탐욕법(Greedy) > 섬 연결하기 (0) | 2023.01.26 |
[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 전력망을 둘로 나누기 (0) | 2023.01.26 |
[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 피로도 (0) | 2023.01.25 |
[Python - 프로그래머스] 코딩테스트 연습 > 완전탐색 > 최소직사각형 (0) | 2023.01.25 |