[파이썬] 프로그래머스 LV1 완주하지 못한 선수

청수동햄주먹·2023년 4월 11일
0

파이썬코딩테스트

목록 보기
25/35

완주하지 못한 선수

내 코드

from collections import Counter

def solution(participant, completion):
  pt = Counter(participant)
  cp = Counter(completion)

  for x in pt.keys() :
  	# 다른 이름의 탈락자
    if x not in cp.keys():
      return x
    # 동명 이인의 탈락자일 경우
    if pt[x] !=cp[x]:
      return x
  • Counter를 이용하였다
  • Counter.keys() 로 set을 이용한 것과 같은 효과
정확성
테스트 1 〉	통과 (0.02ms, 10.2MB)
테스트 2 〉	통과 (0.02ms, 10.3MB)
테스트 3 〉	통과 (0.15ms, 10.1MB)
테스트 4 〉	통과 (0.37ms, 10.3MB)
테스트 5 〉	통과 (0.25ms, 10.3MB)
테스트 6 〉	통과 (0.02ms, 10.2MB)
테스트 7 〉	통과 (0.03ms, 10.1MB)
효율성
테스트 1 〉	통과 (19.17ms, 24.3MB)
테스트 2 〉	통과 (44.32ms, 27.8MB)
테스트 3 〉	통과 (34.45ms, 30.2MB)
테스트 4 〉	통과 (40.51ms, 39MB)
테스트 5 〉	통과 (33.75ms, 39MB)
정확성: 58.3
효율성: 41.7

다른 사람의 풀이

해쉬 연습하라고 한 문제인데 다른 방식으로 풀어서 해쉬로 풀면 어떻게 해야 하는지 찾아보았다.

def solution(participant, completion):
    answer = ''
    temp = 0
    dic = {}
    for part in participant:
        dic[hash(part)] = part
        temp += hash(part)
    for com in completion:
        temp -= hash(com)
    answer = dic[temp]

    return answer
  • hash()
    데이터 검색 속도가 빠르고 키의 중복확인이 쉬워서 검색이 많이 필요할 때 사용
    • 파이썬에서는 dictionary가 해쉬로 구현되어 있다.
  • dic[hash(part)] = part
    • key: hash(선수이름)한 값
    • value: 선수이름
    • temp에 key를 하나씩 더해준다
    • completion에 있는 값들을 해쉬해서 participants에서 더해놨던 temp값에서 하나하나 빼준다
정확성 테스트
테스트 1 〉	통과 (0.01ms, 10.1MB)
테스트 2 〉	통과 (0.01ms, 10.1MB)
테스트 3 〉	통과 (0.19ms, 10.3MB)
테스트 4 〉	통과 (0.38ms, 10.3MB)
테스트 5 〉	통과 (0.39ms, 10.4MB)
테스트 6 〉	통과 (0.00ms, 10.2MB)
테스트 7 〉	통과 (0.00ms, 10.3MB)
효율성  테스트
테스트 1 〉	통과 (22.71ms, 23.9MB)
테스트 2 〉	통과 (34.26ms, 28.3MB)
테스트 3 〉	통과 (37.40ms, 31.4MB)
테스트 4 〉	통과 (45.42ms, 37.6MB)
테스트 5 〉	통과 (46.48ms, 37.6MB)
정확성: 58.3
효율성: 41.7
profile
코딩과 사별까지

0개의 댓글

Powered by GraphCDN, the GraphQL CDN