목차

완주하지 못한 선수

ps
링크programmers.co.kr/…
출처프로그래머스
문제 번호42576
문제명완주하지 못한 선수
레벨Level 1
분류

기초

시간복잡도O(n*l)
인풋사이즈n<=100,000, l<=20
해결날짜2021/03/27
태그

고득점 Kit - 해시

풀이

코드

코드 1

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""

import collections


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

코드 2

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""

import collections


def solution(participant, completion):
    counter = collections.Counter(participant) + collections.Counter(completion)
    return next(x for x, count in counter.items() if count % 2 == 1)

코드 3

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""

import itertools


def solution(participant, completion):
    participant.sort()
    completion.sort()
    return next(p for p, c in itertools.zip_longest(participant, completion)
                if p != c)

코드 4

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""


def solution(participant, completion):
    h = sum(hash(x) for x in participant) - sum(hash(x) for x in completion)
    return next(x for x in participant if hash(x) == h)

코드 5

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""

import functools
import operator


def solution(participant, completion):
    h = functools.reduce(operator.xor,
                         (hash(x) for x in participant + completion))
    return next(x for x in participant if hash(x) == h)

코드 6

"""Solution code for "Programmers 42576. 완주하지 못한 선수".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42576
- Solution link: http://www.teferi.net/ps/problems/programmers/42576
"""


def solution(participant, completion):
    s = [0] * 20
    for name in participant + completion:
        for i, c in enumerate(name):
            s[i] ^= ord(c)
    return ''.join(chr(x) for x in s if x)