문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 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" |
코드 풀이
def solution(participant, complement):
answer = ''
# 단 한명만 완주하지 못했으므로, participant와 complement를 정렬하여 비교한다면 값(이름)이 다른 부분이 존재
p = sorted(participant)
c = sorted(complement)
for i in range(len(c)):
if c[i] != p[i]:
answer = p[i]
return answer
# 예외 : p의 가장 맨뒤 주자가 완주 못했을 경우 > for문에서 검색 x
answer = p[-1]
return answer
참가자 participant와 완주자 complement를 각각 sorted를 이용해 정렬하여 리스트 p, c에 담습니다.
참가자 p중 한명이 완주를 하지 못했으므로 p의 길이는 c의 길이보다 1이 더 길기 때문에 c의 길이 만큼 p와 c의 값을 비교합니다.
인덱스로 접근해 p와 c의 원소들을 비교하다보면, 완주를 하지 못한 사람의 이름이 나타났을 때 p[i]와 c[i]의 값이 달라지게 됩니다.
그럼 참가자 p[i] 선수가 완주를 하지 못했으므로 answer에 대입, 반환을 합니다.
만약 p의 가장 마지막 값이 완주하지 못한 선수라면, for문에서 비교했을 때 완주하지 못한 선수가 나오지 않을 수 있습니다.
for문 안에서 return이 되지 않았다면, answer에 p의 마지막 값을 대입, 반환을 합니다.
[프로그래머스] 더 맵게 - 파이썬(Python)/힙 (0) | 2021.12.15 |
---|---|
[Python] 문자열 압축 - 파이썬(Python) (0) | 2021.12.15 |
[프로그래머스] 오픈 채팅방 - 파이썬(Python) (0) | 2021.12.07 |
[프로그래머스] 신규 아이디 추천 - 파이썬(Python) (0) | 2021.12.07 |
[프로그래머스] 모의고사 - 파이썬(Python) (0) | 2021.12.07 |