Python_완주하지 못한 선수

김보람·2022년 4월 16일
0

Python

목록 보기
21/39

<문제>

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.


< 풀이 1단계>

def solution(participant, completion):
    return ''.join(list(set(participant)- set(completion)))
    # set을 이용했더니 중복값이 제거되어 동명이인의 경우 결과 값이 출력되지 않는다. 
    # 다른 방법으로 고안해보자.

< 풀이 2단계>

def solution(p, c):
    if len(set(p)) != len(set(c)):
        return ''.join((set(p)- set(c)))
    
    else:
        for i in c:
            if c.count(i) != p.count(i):
                return i
# 중복값이 제거되었을 때의 길이를 비교하여 구분했다. 서로의 길이가 똑같을 때에는 count하여 다른 갯수의 이름을 찾아냈다.

<다른 풀이>

방법 1.
import collections

def solution(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]
방법 2.
def solution(participant, completion):
    participant.sort()
    completion.sort()
    for p, c in zip(participant, completion):
        if p != c:
            return p # 같은 값이 있으면 바로 멈추기
    return participant[-1]
방법 3.
def solution(participant, completion):
    answer = ''
    temp = 0
    dic = {}
    for part in participant:
        dic[hash(part)] = part
        temp += int(hash(part))
    for com in completion:
        temp -= hash(com)
    answer = dic[temp]

    return answer

<개념>

from collections import Counter
Counter('programmer') # Counter({'p': 1, 'o': 1, 'r': 2, 'a': 1, ' g': 1, 'm': 2, 'e': 1}).
한 문장이 들어갔을 때 각 원소의 갯수를 자동으로 세어주는 collection 함수~ 알아뒀다가 활용해두기!

profile
starry_developer

0개의 댓글