Programming/코딩테스트
[코딩테스트 python] 해시 - 완주하지 못한 선수(효율성 개선)
aram
2023. 4. 14. 01:27
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 정확도 테스트는 바로 통과!
하지만 효율성에서 전체 실패....
from collections import Counter
def solution(participant, completion):
p_cnt = Counter(participant)
c_cnt = Counter(completion)
answer = [p for p in p_cnt.keys() if (p not in completion) or (c_cnt[p] != p_cnt[p])]
return s for s in answer
일반 for문보단 리스트컴프레션이
빠른 걸로 알고 있지만, 비교하는 과정에서 느려서 그런 듯
고민하다가 결국은 구글링했는데
sort로 정렬해서 풀는 방법도 있었지만,
collections의 Counter가
dict형태로 반환해줘서 sort보다 훨씬 빠름.
기존 코드에서 고민하다가
dict의 items를 보고 바로 해결!
from collections import Counter
def solution(participant, completion):
p_cnt = Counter(participant)
c_cnt = Counter(completion)
for c, n in c_cnt.items():
if c in p_cnt:
p_cnt[c] = p_cnt.get(c) - n
for p, n in p_cnt.items():
if n == 1:
return p
다른사람의 풀이를 보고
Counter는 리스트를 보고 연산이 된다는 사실을 깨달았다...
굳이 이렇게 for문으로 하지 않아도 되는 것..!!
