1. 문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
2. 제한 사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
3. 입출력 예
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" |
4. 내 풀이
이 문제를 약 5개월 전에 푼적이 있다. 그 당시 풀었던 풀이를 보면
def solution(participant, completion):
answer =''
participant.sort()
completion.sort()
for i in range(len(completion)):
if (participant[i] != completion[i]):
answer = participant[i]
return answer
if (answer == ''):
answer = participant[-1]
return answer
인풋으로 주어진 participant와 completion을 정렬한 후 for문을 통해 첫번째 원소부터 비교해서 없는 원소를 찾고 return했다. 이렇게 풀면 파이썬 내장함수로 정렬을 두번이나 하고 for문을 쓰기 때문에 효율성이 좋지 않다. 또한 해당 문제는 분류가 해시이지만 해시(딕셔너리)는 눈을 씻고 찾아봐도 한번도 쓰지 않은 것을 볼 수 있다....
다른 사람의 풀이를 보니
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
collections 모듈의 Counter 함수를 이용하여 3줄로 간결하게 표현하였다. Counter 함수는 리스트의 각각의 원소의 갯수를 딕셔너리 형태로 반환해준다.
해당 풀이는 participant의 원소의 갯수가 각각 담긴 딕셔너리에서 completion의 원소의 갯수가 담긴 딕셔너리를 빼서 answer에 담으면, 문제의 제한 사항에 따라 딕셔너리의 원소는 한개만 저장된다. 이 딕셔너리의 키를 리스트로 변환하여 첫번째 원소를 출력하면 된다.
이 외의 다른 사람들의 풀이를 보고나서 같은 문제를 매우 다양한 방법으로 풀었다는 것을 확인할 수 있었다. collections 모듈 또한 처음 알고 공부할 수 있었고, 더불어 파이썬의 다양한 모듈과 함수들을 많이 알아두는 것이 좋을 것 같다는 생각을 하였다.
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42576
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 예산 (level 3) - 이분탐색/이진탐색 (python) (0) | 2020.05.21 |
---|---|
[프로그래머스] 네트워크 - DFS (깊이우선탐색) (python) (0) | 2020.05.17 |
[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (2) (0) | 2020.05.16 |
[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (1) (0) | 2020.05.16 |
[프로그래머스] 체육복 - 그리디 greedy (python) (4) | 2020.05.15 |