# 문제
# 문제 접근
participant에 존재하는 이름 중에 completion에 존재하지 않는 이름을 찾아서 return하면 되는 문제다.
제한사항에서 "참가자 중에는 동명이인이 있을 수 있습니다." 라는 문구가 있는 것과 입출력 예의 세번 째를 참고하면 같은 이름을 가진 참가자가 있고 답이 그 이름일 때 어떻게 처리할 것인가가 중요 포인트인 것 같다.
또한 참가자 수가 100,000명까지 가능하기 때문에 N^2으로 풀면 시간초과가 날 가능성이 있다는 것을 염두하자.
# 문제 풀이
1. 동명이인이 존재할 수 있기 때문에, 특정 이름이 몇명이 존재하는 지 구분할 수 있어야 한다. 즉 "어떤 이름" : "몇 명" 이란 데이터를 저장할 수 있어야 하는데, 이 형태는 (키 : 값) 을 띄고 있기 때문에 "이름"을 "키"로, "몇 명"을 "값" 으로 딕셔너리 자료구조를 사용하여 저장하자.
2. completion 리스트에 저장 되어있는 이름들에 대하여 위에서 저장한 딕셔너리에서 값을 하나씩 감소시켜 주자. 값이 0이 된 값은 완주한 이름이 되며, 값이 1인 이름이 정답이 된다.
# 코드 작성
def solution(participant, completion):
answer = ''
participant_dict = {}
# 1. participant를 순회하며 딕셔너리 생성
for p in participant :
if p not in participant_dict :
participant_dict[p] = 1
else :
participant_dict[p] += 1
# 2. completion를 순회하며 값 1씩 감소
for c in completion :
name_count = participant_dict[c]
participant_dict[c] = name_count - 1
# 3. 값이 0이 아닌 이름을 찾아 저장 후 반환
for p in participant :
if participant_dict[p] != 0 :
answer = p
break
return answer
* 본 문제의 출처는 프로그래머스(https://programmers.co.kr/) 입니다. 문제가 될 시 삭제하겠습니다.
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 코딩테스트 고득점 Kit > 가장 큰 수 (0) | 2020.03.07 |
---|---|
[프로그래머스] 코딩테스트 고득점 Kit > K번째수 (0) | 2020.03.07 |
[프로그래머스] 코딩테스트 고득점 Kit > 베스트앨범 (0) | 2019.11.05 |
[프로그래머스] 코딩테스트 고득점 Kit > 위장 (0) | 2019.11.05 |
[프로그래머스] 코딩테스트 고득점 Kit > 전화번호 목록 (0) | 2019.11.05 |