완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| 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" |
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
난 바보야
💥 같은 배열을 비교하는거면 정렬 후 비교
function solution(participant, completion) {
participant.sort(); //참가자 배열 정렬
completion.sort(); //완주자 배열 정렬
for(var i=0;i<participant.length;i++){
if(participant[i] !== completion[i]){
//인덱스 0부터 순차적으로 두 배열 비교
return participant[i];
//비완주자가 참가자 배열에 나올 경우 출력
}
}
}
#for문
def solution(participant, completion):
answer = ''
# 1. 두 list를 sorting한다
participant.sort()
completion.sort()
# 2. completeion list의 len만큼 participant를 찾아서 없는 사람을 찾는다
for i in range(len(completion)):
if(participant[i] != completion[i]):
return participant[i]
# 3. 전부 다 돌아도 없을 경우에는 마지막 주자가 완주하지 못한 선수이다.
return participant[len(participant)-1]
#해시
def solution(participant, completion):
hashDict = {}
sumHash = 0
# 1. Hash : Participant의 dictionary 만들기
# 2. Participant의 sum(hash) 구하기
for part in participant:
# part는 선수의 이름
hashDict[hash(part)] = part
sumHash += hash(part)
# 3. completion의 sum(hash) 빼기
for comp in completion:
sumHash -= hash(comp)
# 4. 남은 값이 완주하지 못한 선수의 hash 값이 된다
return hashDict[sumHash]
# counter
#Counter class는 상호간의 뺄셈 연산을 지원
import collections
def solution(participant, completion):
# 1. participant의 Counter를 구한다
# 2. completion의 Counter를 구한다
# 3. 둘의 차를 구하면 정답만 남아있는 counter를 반환한다
answer = collections.Counter(participant) - collections.Counter(completion)
# 4. counter의 key값을 반환한다
return list(answer.keys())[0]
파이썬에서는 Dictionary 라는 자료 구조를 통해 해시를 제공