완주하지 못한 선수
문제 링크
문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 'participant'와 완주한 선수들의 이름이 담긴 배열 'completion'이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해 주세요.
제한 조건
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
입출력 예 설명
입출력 예#1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
입출력 예#2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
입출력 예#3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한 명은 완주하지 못했습니다.
해결 과정
완주하지 못한 선수 문제는 해시 카테고리에 속해있기 때문에 해시를 활용하는 쪽으로 접근했습니다.
1. Ditionary를 활용하여 Hashmap을 만들어주고 Hash값을 누적할 sumHash를 선언해 줍니다.
2. 참가자를 모두 확인하여 Hashmap에 담아주고 참가자의 Hash값을 sumHash에 누적해 줍니다.
3. 완주한 선수들을 모두 확인하며 Hash값을 sumHash에서 감소시킵니다.
4. Hashmap에서 sumHash에 남아있는 hash값을 Key로 가지고 있는 값을 반환합니다.
** HashMap의 Key의 중복을 허용하지 않는 특성을 활용한 방법입니다.
제출 코드
def solution(participant, completion):
hash_dict = dict()
sumHash = 0
for part in participant:
hash_dict[hash(part)] = part
sumHash += hash(part)
for comp in completion:
sumHash -= hash(comp)
return hash_dict[sumHash]
또 다른 풀이
1. Sorting / loop를 활용한 코드
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]
2. Counter를 활용한 코드
def solution(participant, completion):
from collections import Counter
answer = Counter(participant) - Counter(completion)
return list(answer.keys())[0]
'ALGORITHM > Programmers' 카테고리의 다른 글
[Python] 프로그래머스, 위장 Lv.2 (feat. hash, counter, 파이썬) (52) | 2023.04.04 |
---|---|
[Python] 프로그래머스, 피로도 Lv.2 (feat.permutations, 파이썬) (58) | 2023.03.30 |
[Python] 프로그래머스, 전화번호 목록 Lv.2 (feat.HashMap, 해시, startswith, 파이썬) (35) | 2023.03.24 |
[Python] 프로그래머스, 큰 수 만들기 Lv.2 (feat.greedy, stack, combinations, 시간 초과, 파이썬) (36) | 2023.03.22 |
[Python] 프로그래머스, 조이스틱 Lv.2 (feat.greedy, Brute Force, 그리디, 완전탐색, 파이썬) (35) | 2023.03.20 |