본문 바로가기

두두의 알고리즘/문제

[해시] 프로그래머스 L1 '완주하지 못한 선수' (Python)

728x90

<문제 링크>

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr


<문제 풀이>

  1. 동명이인을 구분하기 위해 참가자의 이름별로 1씩 더한다. (동명이인이라면 2가 되니까)
  2. 완주자 명단에 있는 이름은 1을 뺀다.
  3. 완주하지 못한 사람은 한 명뿐이므로 값이 1인 이름을 출력한다.

<코드>

#1차시도 - 정확성 1,3,4,5 효율성 1,2,3,4,5 실패
def solution(participant, completion):
    answer = ''
    participant = sorted(participant)
    completion = sorted(completion)
    
    for x,y in zip(participant, completion):
        if x!=y:
            answer = x
    if answer == '':
        answer = participant[-1]
    return answer

 

#성공
def solution(participant, completion):
    answer = ''
    dic = {x:0 for x in participant}
    
    for i in participant:
        dic[i] +=1
    for i in completion:
        dic[i] -=1    
    for k,v in dic.items():
        if v==1:
            answer = k
    return answer

 

<고쳐야 할 점>

  • import Counter from collections ==> Counter({'key':count}). 키 별로 개수를 세주는 라이브러리 기억하기
  • 해시(딕셔너리에) 익숙해지기