[프로그래머스] 완주하지 못한 선수 - Python3
문제 설명
마라톤에 참여한 선수들의 이름과 완주한 선수들의 이름이 담긴 배열이 주어졌을 때, 완주하지 못한 선수의 이름을 return 하는 문제(동명이인 O)
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 알고리즘 분류 - 해시
- 난이도 - Level 1
접근 방법
1. Dictionary
set으로 바꾸고 차집합을 구하는 방식으로 풀어보려 했더니 JSON 에러가 나서 딕셔너리를 이용해 풀었다.
{이름: 경기장 내 인원 수}의 형태로
participant의 이름들을 key로, 0을 value로 가지는 딕셔너리를 만든 후, participant를 탐색하며 발견된 이름들의 value에 1씩 더해줬다.
그리고 completion을 탐색하며 이름이 발견되면 딕셔너리의 value값을 1씩 빼줬다.
이 과정을 마치면 value 값이 1 이상인 key값이 완주하지 못한 선수의 이름이 된다.
2. Set
(다른 사람의 풀이 참고)
set을 이용하면 json 오류는 둘째치고 동명이인을 어떻게 처리할지가 고민이었는데, completion 원소들이 participant와 completion에서 각각 몇 번 등장하는 지를 세준 후, 등장횟수가 다른 원소를 리턴하면 되는 거였다.
3. Collections
(다른 사람의 풀이 참고)
가장 간단한 방법이다. Counter 자료형으로 변환해준 후, participant-completion 차집합 연산을 하면 남은 원소가 답이 된다.
4. Hash
(다른 사람의 풀이 참고)
졸리니까 자고 일어나서 마저 공부해보겠다....
관련 개념
collections.Counter()
해시 가능한 객체를 세는 데 사용하는 딕셔너리 서브 클래스
얘랑 해시 개념도 자고 일어나서 마저....
답안 코드
+9
1. Dictionary
def solution(participant, completion):
answer = ''
cnts = {p:0 for p in participant}
for p in participant:
cnts[p] += 1
for c in completion:
cnts[c] -= 1
for p in participant:
if cnts[p] > 0:
answer = p
return answer
2. Set
(다른 사람의 풀이 참고)
#
3. Collections
(다른 사람의 풀이 참고)
#
4. Hash
(다른 사람의 풀이 참고)
#