Programming/Coding Test

프로그래머스 코딩테스트 lv 1. 완주하지 못한 선수 문제 풀이

makeitworth 2021. 5. 1. 01:06

문제

완주하지 못한 선수

 

생각 과정

입력 : 참여자 명단 리스트 / 완료자 명단 리스트

출력: 완주하지 못한 선수 문자열

 

주어진 조건에 의하면 단 한 명만 완주하지 않았기 때문에 참여자 명단 리스트에서 완료자 명단 리스트와 똑같은 것을 다 빼주면, 남는 1명을 찾으면 된다.

 

그런데 제한사항에서 참여자 리스트가 최대 10만 까지 가기 때문에 그냥 리스트를 for 반복문으로 계산하면 너무 오래 걸린다.

그리고 참여자의 이름에는 동명이인이 있다.

훨씬 속도가 빠른 딕셔너리로 {'사람이름' : '참가한 수'} 형태의 자료구조를 만들고, 완주자 리스트에 있으면 '참가한 수' 에서 한 명씩 빼주자.

 

 

제출 답안

def solution(participant, completion):
    par = {}
    #참여자 딕셔너리 만들기
    for p in participant:
        par[p] = par.get(p,0) + 1
    #완주자 명단에 있으면 빼기
    for c in completion:
        par[c] -= 1
	#딕셔너리에서 밸류값이 0이 아닌, 즉 완주자로 다 빼지 못한 요소의 키값 리턴
    remain = [k for k,v in par.items() if v!=0]
    return remain[0]