다른 사람의 풀이1(해시를 이용하는경우)
def solution(participant, completion):
hashDict = {}
sumHash =0
#1. participant list의 hash를 구하고, hash값을 더한다.
for part in participant:
hashDict[hash(part)]=part
sumHash +=hash(part)
#2. completion list의 hash를 빼준다.
for comp in completion:
hashDict[hash(comp)]=comp
sumHash =hash(comp)
#3.남은 값은 완주하지 못한 선수의 hash값이 된다.
return hashDict[sumHash]
▶ 참가 선수들의 각 Hash값을 전부 더하고, 완주한 선수들의 Hash값을 빼주면,
완주하지 못한 선수 1명의 해쉬값만 남는다.
다른 사람의 풀이2 (Counter 모듈을 이용하는 경우)
from collections import Counter
def solution(participant, completion):
# 1. participant의 counter를 구한다.
part_counter = Counter(participant)
# 2. completion의 counter를 구한다.
comp_counter = Counter(completion)
# 3. 둘의 차를 구하고, key를 읽어온다.
answer = Counter(participant) - Counter(completion)
#반환타입이 객체임 그래서 리스트로 감싼다음 완주하지 못한 선수 1명있는 자리 인덱스0 자리에 접근
return list(answer.keys())[0]
▶ 파이썬의 Counter함수는 각 요소가 몇개씩 있는지를 key와 value형태의 객체로 반환한다.
▶ Counter - Counter하는 경우 객체를 반환한다.
▶ 이 객체를 리스트로 감싼다음, keys()를 키에 해당하는 값을 찾는다.
'프로그래머스(파이썬) > LV.1(파이썬)' 카테고리의 다른 글
과일장수 →특정요소 여러 개 제거★★+ 1차원 리스트 슬라이싱(n등분)★★ (0) | 2022.12.20 |
---|---|
가장 가까운 글자→ 다중 index를 이용★★ (0) | 2022.12.20 |
다트 게임→ 정규식, findall(), recompile() + 스택을 표방한 리스트 (0) | 2022.12.19 |
체육복→ 앞에 확인하고, 뒤에 확인하고, set의 차집합(-)★ (0) | 2022.12.18 |
로또의 최고순위와 최저순위★★ → "그외"처리 + in 연산자 +인덱스==등수 (0) | 2022.12.18 |