본문 바로가기
코딩 테스트&알고리즘/프로그래머스 level 2

[파이썬] 프로그래머스 - 위클리챌린지 5주차

by 창현2 2021. 8. 30.
  • 모음 사전

문제 설명

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

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • word의 길이는 1 이상 5 이하입니다.
  • word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.

입출력 예

wordresult

"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

입출력 예 설명

입출력 예 #1

사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.

입출력 예 #2

"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.

입출력 예 #3

"I"는 1563번째 단어입니다.

입출력 예 #4

"EIO"는 1189번째 단어입니다.

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

 

코딩테스트 연습 - 5주차

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

programmers.co.kr

 


alpha = ["A","E","I","O","U"]
words = []

def dfs(cnt, c):
    if cnt == 5:
        return
    for a in alpha:
        tmp_c = c + a
        words.append(tmp_c)
        dfs(cnt+1, tmp_c)
    

def solution(word):
    answer = 0
    dfs(0, "")
    words.sort()
    
    return words.index(word)+1

 

정확성  테스트
테스트 1 〉	통과 (0.82ms, 10.4MB)
테스트 2 〉	통과 (0.79ms, 10.4MB)
테스트 3 〉	통과 (0.84ms, 10.4MB)
테스트 4 〉	통과 (0.88ms, 10.5MB)
테스트 5 〉	통과 (0.87ms, 10.4MB)
테스트 6 〉	통과 (0.80ms, 10.5MB)
테스트 7 〉	통과 (0.83ms, 10.4MB)
테스트 8 〉	통과 (0.81ms, 10.4MB)
테스트 9 〉	통과 (0.84ms, 10.4MB)
테스트 10 〉	통과 (0.79ms, 10.5MB)
테스트 11 〉	통과 (0.81ms, 10.4MB)
테스트 12 〉	통과 (0.85ms, 10.4MB)
테스트 13 〉	통과 (0.84ms, 10.4MB)
테스트 14 〉	통과 (1.45ms, 10.6MB)
테스트 15 〉	통과 (0.82ms, 10.4MB)
테스트 16 〉	통과 (0.81ms, 10.5MB)
테스트 17 〉	통과 (0.84ms, 10.4MB)
테스트 18 〉	통과 (1.41ms, 10.3MB)
테스트 19 〉	통과 (0.84ms, 10.4MB)
테스트 20 〉	통과 (0.81ms, 10.4MB)
테스트 21 〉	통과 (0.80ms, 10.5MB)
테스트 22 〉	통과 (0.81ms, 10.5MB)
테스트 23 〉	통과 (0.87ms, 10.5MB)
테스트 24 〉	통과 (0.80ms, 10.6MB)
테스트 25 〉	통과 (0.81ms, 10.3MB)
테스트 26 〉	통과 (1.35ms, 10.4MB)
테스트 27 〉	통과 (0.83ms, 10.3MB)
테스트 28 〉	통과 (0.86ms, 10.4MB)
테스트 29 〉	통과 (0.80ms, 10.4MB)
테스트 30 〉	통과 (0.79ms, 10.4MB)
테스트 31 〉	통과 (0.82ms, 10.3MB)
테스트 32 〉	통과 (0.83ms, 10.2MB)
테스트 33 〉	통과 (0.85ms, 10.4MB)
테스트 34 〉	통과 (0.81ms, 10.4MB)
테스트 35 〉	통과 (0.87ms, 10.4MB)
테스트 36 〉	통과 (0.82ms, 10.4MB)
테스트 37 〉	통과 (0.82ms, 10.5MB)
테스트 38 〉	통과 (0.83ms, 10.4MB)
테스트 39 〉	통과 (0.82ms, 10.4MB)
테스트 40 〉	통과 (0.82ms, 10.5MB)

 

후기

 정렬이 관건인 문제다. 하지만 문제에서 설명하는 정렬의 조건이 파이썬의 내장 정렬 함수와 동작방식이 똑같아서, 그냥 sort만 써도 되는 문제였다.

 만약 첫 번째 문자, 두 번째 문자 등의 특정 위치를 기준으로 정렬해야 할 경우는 list.sort(key = lambda x : (x[0], x[1]) ) 같이 사용해야 한다.

 

풀이

* dfs를 돌며 5글자 이내의 모든 알파벳 경우의 수를 넣는다

* 문제 조건에 맞게 정렬을 한다. 각각 문자 위치가 답이다.

 

 

댓글