코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 0 외계어 사전

_알파카 2024. 3. 16. 20:37
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/120869

 

내 풀이

def solution(spell, dic):

    new_arr = []
    # spell의 원소가 전부 한 번씩 사용되어야함
    # spell의 원소 중 하나라도 dic의 각 원소에 없으면 break. 
    # spell의 원소를 갖고 있는 dic을 new_arr에 추가
    for d in dic:
        for s in spell:
            if s not in d:
                break
            new_arr.append(d)
    
    # new_arr에는 spell의 각 원소를 포함하는 dic원소가 모두 들어가있음
    for i in new_arr:
        if new_arr.count(i) == len(spell):
            return 1
            
    return 2

 

주어진 문제에서는 spell의 원소가 모두 있어야 spell을 조합해 만들 수 있는 단어로 여겨진다. 

따라서 dic의 원소와 spell의 원소를 모두 순회하며, 

spell의 원소가 하나라도 d에 없으면 break. 

spell의 각 원소가 d에 있으면 각 원소에 대응되는 값을 모두 new_arr에 담는다. 

 

이제 new_arr에는 spell의 각 원소를 포함하는 dic의 원소가 모두 들어가있다. 

예를 들어, 

첫 번째 케이스를 보면,,

spell은 p, o, s이다. 

dic의 원소 중 sod를 기준으로 보면, 

sod는 p가 없으므로 new_arr에 담지 않는다. break를 진행하여 더 이상 진행하지 않는다. 

 

두 번째 원소 eocd 역시 p 가 없으므로 new_arr에 담지 않고 break를 진행하지 않는다. 

 

다음으로 두 번째 케이스를 확인해보겠다. 

def에는 z가 없다. -> break

dww에는 z가 없다 -> break

dzx에는 z가 있다 -> dzx를 new_arr에 append

-> dzx에는 d가 있다 -> dzx를 new_arr에 append

-> dzx에는 x가 있다 -> dzx를 new_arr에 append

 

==> 이 후, spell의 원소의 개수만큼 new_arr에 같은 원소가 있으면 spell을 모두 조합한 단어이므로 

1을 return한다. 

 

 

다른 사람 풀이

def solution(spell, dic):
    for d in dic:
        if sorted(d) == sorted(spell):
            return 1
    return 2

 

이 풀이는 dic의 원소를 정렬한 것과 spell을 정렬한 것이 같으면 

spell을 모두 사용하여 조합한 단어로 여겨 1을 return하는 코드이다. 

굉장히 깔끔한 코드인듯하다!!

 

 

느낀점

생각보다 간단한 문제인데 나는 좀 어렵게 푼듯하다!

728x90