문제
생각 과정
입력 : 참여자 명단 리스트 / 완료자 명단 리스트
출력: 완주하지 못한 선수 문자열
주어진 조건에 의하면 단 한 명만 완주하지 않았기 때문에 참여자 명단 리스트에서 완료자 명단 리스트와 똑같은 것을 다 빼주면, 남는 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]
'Programming > Coding Test' 카테고리의 다른 글
leetcode 937. Reorder Data in Log Files 리트코드 937. 로그 파일 재정렬 풀이 (0) | 2021.05.06 |
---|---|
leetcode 819. Most Common Word 리트코드 819. 가장 흔한 단어 문제 풀이 (0) | 2021.05.06 |
프로그래머스 코딩테스트 lv 1. 모의고사 문제 풀이 (0) | 2021.04.28 |
투 포인터 two pointer 를 활용하여 문제 해결하기 (0) | 2021.04.25 |
책 <파이썬 알고리즘 인터뷰> 정리 (0) | 2021.04.23 |