본문 바로가기
Algorithm/programmers

[programmers] Lv.2 모음사전 (python)

by sun_HY 2023. 7. 26.
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

 

 

#완전탐색

 

 

 

개수가 많지 않아서 완전탐색답게 모두 다 구현해놓고 인덱스로 찾았다.

1, 11, 111, ..., 55555까지 모두 담은 리스트를 만들고,

제공된 단어를 'A' - 1, 'E' - 2 등의 숫자로 매치해서 변경한 후

만들어 놓은 리스트에서 인덱스를 찾으면 된다.

 

숫자 리스트를 만들 때는 1에서 55555까지 for문을 돌린 후 1, 2, 3, 4, 5만 포함되어 있는지 확인하는 함수를 따로 만들었다

이때 숫자 형태로 넣으면 1, 2, 3, 4, 5로 정렬이 되지만 문자열로 넣으면 1, 11, 111... 이렇게 정렬이 된다.

all 함수를 사용하는 법도 배웠는데, 시간 효율은 '0' not in ... 이런 식으로 하는 게 더 빠르다.

처음에 4번 테케에서 런타임에러가 났는데 for문을 55556까지 안 하고 55555까지 해서..

vowels 앞의 빈 ''과 숫자 배열 앞의 [0]은 모두 인덱스 1부터 사용하기 위해 넣었다

 

 

 

def check(check_num):
    # 12345만 포함하고 있는지 체크하는 함수
    return all(n in '12345' for n in check_num)

# check 함수 이렇게 정의하면 시간은 더 빠름
# def check(n):
#     if '0' not in n and '6' not in n and '7' not in n and '8' not in n and '9' not in n:
#         return True
#     else:
#         return False


def solution(word):
    # 사용 가능한 모음들 (''은 인덱스 처리 위해)
    vowels = ['', 'A', 'E', 'I', 'O', 'U']
    
    # 1부터 55555까지 1, 2, 3, 4, 5만 포함한 숫자 순서대로 저장
    # str로 저장할 경우 1, 11, 111 순서대로 정렬됨
    idxs = [0] + sorted([str(x) for x in range(1, 55556) if check(str(x))])
    
    # 입력된 문자열을 숫자로 변경
    idx_word = ''
    for w in word:
        idx_word += str(vowels.index(w))

    # idxs 배열에서의 인덱스값이 사전에서 몇번째 등장하는지의 값
    return idxs.index(idx_word)
 

 

프로그래머스

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

programmers.co.kr

 

728x90