본문 바로가기

CodingTest/Level1

[연습]코딩테스트- 완주하지 못한 선수

코딩 테스트 연습문제

  • programmers.co.kr
  • 완주하지 못한 선수를 출력하시오. 문제


# 참가자, 완주자 리스트를 제공한다
# 완주하지 못한 사람을 출력하자.
# 동명이인이 있을 수 도 있다.

def solution(participant, completion):
    if 1 > len(participant) or len(participant) > 100000:
        return ""
    if len(participant) < len(completion):
        return ""

    answer = []
    for x in set(participant):
        # 동명이인 모두가 완주했는가?
        if participant.count(x) >=2 and participant.count(x) != completion.count(x):
            answer += [x *(participant.count(x) - completion.count(x))]

        # 참가자가 완주를 했는가?
        if participant.count(x) == 1 and participant.count(x) != completion.count(x):
            answer += [x]


    return "".join(answer)


#print (solution(    ["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"]))

풀이결과로
정확성에서는 문제가없는데
효율성(시간)에서 초과난다.
문제를 해결해보자,,


검색해보니까 collection 모듈을 사용하여 푸는 풀이가 대박이다.

import collections

answer = collections.counter(participation) - collections.counter(completion)

return list(answer)[0]
  • 더하여,
    문제를 좀 더 자세히 읽자.
    문제에 완주하지 못한자는 1명이라고 써있었다.
    풀이할때는 몇명이 될 수 도 있다라는 가정으로 생각하고 풀어버렸다.
    맨앞에 완주자가 있으면 바로 끝나도 되는것을 끝까지 돌고있으니...
반응형