본문 바로가기

프로그래머스 풀이

프로그래머스 2단계 - 모음사전 (Python)

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

 

코딩테스트 연습 - 모음사전

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니

programmers.co.kr

 

혼자서 풀어보려다가 규칙이 잘 안보여서 결국 여러개의 블로그를 참고했다.

I가 1563이라는 것에서 힌트를 찾아야한다.

0번째 인덱스에서 A가 1, I가 1563이면, A에서 E까지 (1563-1)/2 = 781 이라는 것을 유추할 수 있다.

A=>1,  E=>782,  I=>1563

그리고 AAAAA와 AAAAE의 차이는 1이고 AAAA와 AAAE의 차이는 6이라는 것도 유심히 봐야한다.

AAAA와 AAAE의 차이는 1*5 + 1 = 6이라는 것.

AAA와 AAE의 차이는 6*5 + 1 = 31.

AA와 AE의 차이는 31*5 + 1 = 156.

A와 E의 차이는 156*5 + 1 = 781.

이런 규칙을 찾아서 알고리즘을 구현하면 된다.


Python

풀이 1

1
2
3
4
5
6
7
def solution(word):
    answer = 0
    arr = ['A''E''I''O''U']
    num = [7811563161]
    for i in range(len(word)):
        answer += arr.index(word[i]) * num[i] + 1
    return answer
cs

위에서 설명한대로 풀면 되지만 조금 더 직관적인 방법을 찾고싶어서 더 검색해보았다.

 

풀이 2

https://latte-is-horse.tistory.com/217

 

[프로그래머스 위클리챌린지] 5주차_모음 사전

도움이 되었다면 [mangbaam] 좋아요 부탁드려요! 이번 주는 19번째로 풀이했다. (이미 10시 50분에 풀이를 완료한 사람이 6명이나 있었던...) 문제 설명 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용

latte-is-horse.tistory.com

두번째 풀이가 더 직관적이였다. 어딘가에서 이 문제의 모든 경우의 수는 5^5 + 5^4 + 5^3 + 5^2 + 5로 시간초과가 나지 않아서 완전탐색으로 풀어도 된다는 말을 보았다. (A~U: 5, AA~UU: 5*5 ...여서 경우의 수가 저렇게 나오는 듯 하다)

그래서 딕셔너리로 문제와 똑같은 사전을 만들어서 인덱스를 찾는 방법이다.