[프로그래머스] 해시, 완주하지 못한 선수

programmers

머리에 기름칠 좀 할 겸,
매일 한 시간씩 프로그래머스에서 제공하는 코딩 테스트 연습문제를 풀고 있다.
주소: https://programmers.co.kr/learn/courses/30/parts/12077


오늘 푼 문제는 해시 문제 0 1 2

내 풀이

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for p, c in zip(participant, completion):
        if p != c:
            return p
    return participant[-1]

해시를 안 썼다. 잘 모른다. 불만족스럽다.

가장 추천수가 높은 풀이

import collections


def solution(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

collections 모듈을 쓴 풀이. 가장 괜찮았다.

가장 좋았던 풀이 두 개

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
def solution(participant, completion):
    dict_part = {}
    for person in participant:
        if person in dict_part.keys():
            dict_part[person] += 1
        else:
            dict_part[person] = 1
    for indiv in completion:
        dict_part[indiv] -= 1
    answer = [x for x,y in dict_part.items() if y!=0]
    return ''.join(answer)

collections.Counter()

import collections
 

count = Counter()                           # a new, empty counter
count = Counter('gallahad')                 # a new counter from an iterable
count = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
count = Counter(cats=4, dogs=8)             # a new counter from keyword args

count = Counter(['eggs', 'ham'])
c['bacon']                              # 엘리먼트가 없으면 0 리턴
# 0

a_list = ['a', 'b', 'c', 'c', 'a', 'a']
print(collections.Counter(a_list))
# Counter({'a': 3, 'c': 2, 'b': 1})
 
b_list = ['a', 'd', 'c', 'a', 'b']
print(collections.Counter(b_list))
# Counter({'a': 2, 'd': 1, 'b': 1, 'c': 1})
 
result = collections.Counter(a_list) + collections.Counter(b_list)
print(result)
# Counter({'a': 5, 'c': 3, 'b': 2, 'd': 1})

# pandas의 head()와 같다. 상위 n개의 key, value쌍 return
print(result.most_common(3))
# [('a', 5), ('c', 3), ('b', 2)]