문제
programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
문제설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
<제한사항>
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
<입출력 예>
participant | completion | return |
[leo, kiki, eden] | [eden, kiki] | leo |
[marina, josipa, nikola, vinko, filipa] | [josipa, filipa, marina, nikola] | vinko |
[mislav, stanko, mislav, ana] | [stanko, ana, mislav] | mislav |
<입출력 예 설명>
예제 #1
leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
접근
파이썬에서 해시 자료구조인 딕셔너리를 알고있다면, 손쉽게 풀 수 있는 문제.
사실 딕셔너리를 알고 있더라도 문제를 보고서 딕셔너리로 풀어야한다는 사실을 바로 알아낼수 없을 것이다.
문제를 보고 해결을 위한 자료구조를 빠르게 알아내기 위해서는 다양한 문제를 많이 풀어보는 수밖에 없는것 같다.ㅠㅠ
<딕셔너리>
- 키와 값을 같이 저장하는 자료구조
- 요소의 추가, 변경, 삭제 가능
- 키는 중복, 변경 안됨. 키는 숫자, 문자열, 튜플만 가능
- 값의 중복, 변경 허용.
풀이
def solution(participant, completion):
participant.sort()
completion.sort()
count = {} # 딕셔너리 변수 count 선언(각 선수들을 카운트하기위해)
for i in participant:
if i not in count: # 현재 참가자명이 count에 없으면
count[i] = 1 # 현재 참가자명을 1로 세팅
else:
count[i] += 1 # 이미있으면 현재 참가자명을 +1
for i in completion:
if i in count: # 현재 완주자명이 count에 있으면
count[i] -= 1 # count -1
for i in count: # count 변수 확인
if count[i] == 1: # 1이면 (완주하지 못했다는 뜻)
return i # 리턴
마침
질문은 언제나 환영합니다
댓글