<간단한 문제 설명 및 이해>
참가자는 participant, 완주자는 completion 이며
완주자 리스트에 없는 참가자 = 미완주자 를 출력하는 문제이다.
동명이인이 있을 수 있기 때문에 주의해야한다.
<처음 내가 생각한 방법>
1. partipant에서 completion을 빼서 출력한다
2. if completion이 participant에 있다면 continue 없다면 answer에 추가하여 출력한다
이때 발생한 문제: 중복문제가 해결되지 않는다.
문제 해결방법: completion에 이름이 있다면 completion에서 바로 지운다 -> 중복문제 해결
<1차 작성 코드>
def solution(participant, completion):
answer = ''
for people in participant:
if people in completion:
completion.remove(people)
else:
answer += people
return answer
모든 테스트케이스는 통과했지만 시간초과로 효율성 면에서 0점이다
왜 시간이 오래 걸렸는가?:
내 생각엔 아무래도 하나하나 검사해서 넣어야하니까 시간이 오래 걸린 것 아닌가 싶다
<다른 사람 풀이를 참고한 2차 작성코드>
아무래도 해시 문제이니 해시로 접근하는게 이상적일것같아 해시로 푼 코드를 참고했다.
def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for ppeople in participant:
dic[hash(ppeople)] = ppeople
temp += int(hash(ppeople))
for cpeople in completion:
temp -= hash(cpeople)
answer = dic[temp]
return answer
participant의 해시값은 temp에 다 더하고, completion의 hash값을 temp에서 뺀다.
answer에 key형태로 temp를 가져와 반환하면 completion하지 못한 participant가 출력된다.
댓글 영역