상세 컨텐츠

본문 제목

[카카오 코딩테스트 기출] 완주하지 못한 선수

카테고리 없음

by yukmim 2022. 1. 6. 15:33

본문

<간단한 문제 설명 및 이해>

참가자는 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가 출력된다.

댓글 영역