곰퓨타의 SW 이야기

[프로그래머스 level2 5주차_모음사전] 수학적 사고를 활용하기 본문

TIL/프로그래머스

[프로그래머스 level2 5주차_모음사전] 수학적 사고를 활용하기

곰퓨타 2021. 9. 29. 04:06

해결해야하는 문제는 다음과 같았다.

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

 

코딩테스트 연습 - 5주차_모음사전

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

programmers.co.kr

 

 

오랜만에 2단계 문제를 해결해보았다! 2단계인데 어렵게 느껴졌다 ㅎㅎ..

공식을 생각하는데 한참 걸렸다..!

 

아이디어는 다음과 같다.

(계속 생각날 떄까지 끄적이던 것)

 

(정리)

1. vowel 을 사전으로 AEIOU에 각각 1,2,3,4,5 를 key-value 값으로 저장하였다.

 

2. number은 각 자릿수마다 하나가 변경되는데 있는 사전 개수이다.

    0 : 780은 A  ~ E 를 알기 위한 것으로, A A ~ A U U U U 까지의 개수이다. 

    1 : 155는 A A ~ A E 를 알기 위한 것으로 A A A ~ A A U  U U 까지의 개수이다.

    2 : 30은 A A A ~ A A E 를 알기위한 것으로 A A A A ~ A A A U U 까지의 개수이다.

    3 : 5는 A A A A ~ A A A E 를 알기 위한 것으로 A A A A A ~ A A A A U까지의 개수이다.

 

3. 현재 word가 A 인 경우는, 한 단계만 나아가고, 

그렇지 않은 경우 ,  (현재 자리 모음의 바로 이전 모음)*(현재 자리) + (A~현재모음까지의 개수) 만큼 나아가도록 하였다.

--> 즉 한 자리 한자리 검사하되, 해당 자리에서 이전 모음까지의 경우의 수를 누적해나가는 방식을 활용하였다!

 

이는 그림으로 그리자면 다음과 같다.

 

 

아이디어를 바탕으로 작성한 코드는 다음과 같다.

def solution(word):
    answer = 0
    vowel = {'A':1,'E':2,'I':3,'O':4,'U':5}
    number = {0:780, 1:155, 2:30, 3:5,4:0}

    for i in range(len(word)) :
        if word[i]=='A' :
            answer += 1
        else :
            answer += (vowel[word[i]]-1)*number[i]+vowel[word[i]]
    return answer

 

일일이 작성하여 만든 노가다식 코드를 작성하게 되었다..수학적 사고를 기르는 연습이 필요할 것 같다!

Comments