문제: 완주하지 못한 선수
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
- 내 풀이
- 순서대로 정렬해서 completion값과 비교하는 도중 틀린 값이 나오는 경우/ 비교해도 나오지 않는 경우
두 가지로 나눠서 리턴 값 지정
def solution(participant,completion):
participant.sort()
completion.sort()
for i in range(len(participant)-1):
if participant[i]!=completion[i]:
return participant[i]
return participant[-1]
- 다른 사람 풀이
1. 가장 효율적인 풀이
- collection 모듈의 Counter 클래스 사용
- Counter 클래스는 iterable 객체(list, dict, set, str, bytes, tuple, range)와 같은 반복 가능한 객체의 요소를 카운트
→ 각각의 빈도 값을 {요소:빈도} 형태인 해쉬 테이블형태(카운터 객체)로 반환
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
2. 해시 함수를 이용한 풀이
- 해싱
- 해싱이란 많은 양의 데이터를 integer와 같이 작은 양의 데이터로 반환해주는 알고리즘
- 파이썬에서는 딕셔너리{Key:Value} 로 이용한다.
- hash(part) 를 Key로 이용해서 딕셔너리에 삽입

def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for part in participant:
dic[hash(part)] = part
temp += int(hash(part))
for com in completion:
temp -= hash(com)
answer = dic[temp]
return answer
-해시함수: String을 기반으로 정보 기록/관리해야할 때 사용
https://www.youtube.com/watch?v=zFL29ydL9D8
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] x만큼 간격이 있는 n개의 숫자 (0) | 2022.02.05 |
|---|---|
| [프로그래머스] [Level 1] 직사각형 별 찍기 (0) | 2022.02.05 |
| [프로그래머스] [Level 1] 신고 결과 받기 (0) | 2022.02.03 |
| [프로그래머스] 가장 큰 수 (정렬) (0) | 2022.02.03 |
| [프로그래머스] K번째 수 (정렬) (0) | 2022.02.03 |