프로그래머스/파이썬_입문

외계어 사전

싱싱한복초이 2025. 1. 3. 17:38

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 설명]

PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • spell과 dic의 원소는 알파벳 소문자로만 이루어져있습니다.
  • 2 ≤ spell의 크기 ≤ 10
  • spell의 원소의 길이는 1입니다.
  • 1 ≤ dic의 크기 ≤ 10
  • 1 ≤ dic의 원소의 길이 ≤ 10
  • spell의 원소를 모두 사용해 단어를 만들어야 합니다.
  • spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두 개 이상 존재하지 않습니다.
  • dic과 spell 모두 중복된 원소를 갖지 않습니다.

[나의 풀이]

문제에 대한 궁금증: spell의 원소인 알파벳 외에도 다른 알파벳이 포함되어 있어도 answer를 1로 처리해야하는가?
채점 결과와 다른 사람들의 풀이를 보았을때 spell의 원소들을 정렬 했을때, 완전히 일치하는 단어만을 answer 1로 처리하는 것 같음

 

나는 아래와 같이 푸었는데 이 경우에 spell의 원소 중 하나를 두번 이상 사용하여도 1로 return해서 완벽한 풀이는 아니라고 생각한다.

def solution(spell, dic):
    spell_set = set(spell)

    for word in dic:
        if set(word) == spell_set:
            return 1  
    
    return 2

 

  • for 루프 시작:
    • dic에 있는 단어를 하나씩 순회합니다.
    • 첫 번째 단어에서 if set(word) == spell_set 조건을 평가합니다.
  • 조건을 만족하면:
    • 조건이 True라면 return 1을 실행합니다.
    • 함수는 즉시 종료되고 2는 반환되지 않습니다.
  • 조건을 만족하지 않으면:
    • 조건이 False인 경우 for 루프는 다음 단어로 넘어갑니다.
    • 모든 단어를 검사했는데도 조건을 만족하는 단어가 없다면, for 루프가 종료됩니다.
    • 이 시점에서 return 2가 실행됩니다.

 

set(word)에 대한 예시

 

[다른 풀이]

 

len(spell) == len(s) 조건을 넣어주면 엄격하게 판별할 수 있다.

def solution(spell, dic):
    spell = set(spell)
    for s in dic:
        if (len(spell) == len(s)) and (not spell-set(s)):
            return 1
    return 2

 

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

 

+) dic의 원소의 알파벳 중복이 허용되는 경우

def solution(spell, dic):
    spell = set(spell)
    return int(any(d for d in dic if not spell - set(d))) or 2

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

💫평행  (0) 2025.01.05
저주의 숫자 3  (0) 2025.01.04
💫숨어있는 숫자의 덧셈 (2)  (0) 2024.12.10
💫안전지대 + set()  (0) 2024.12.05
삼각형의 완성조건 (2)  (0) 2024.11.30