티스토리 뷰

반응형

문제 

 

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

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��

programmers.co.kr

 

 

나의 풀이 

 

파이썬에 있는 소팅을 사용해서 정렬해준 후, 앞에서부터 두 배열이 일치하는지 확인하면 간단하게 풀릴 것 같았다

프로그래머스에서 문제를 처음 풀어봐서 꼭 적혀있는 형식을 지켜야하는줄 알고 return answer을 하기위해 이런식으로 짰는데

정확도 10/50, 효율 0/50으로 10점이 나왔다 

def solution(participant, completion):

    participant.sort()
    completion.sort()

    answer = participant[-1]

    for i in range(len(completion)):
        if participant[i] != completion[i]:
            answer = participant[i]

    return answer

 

근데 answer를 지우고 바로 리턴하게 했더니 100점이 나왔다

def solution(participant, completion):

    participant.sort()
    completion.sort()

    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]

    return participant[-1]

 

무슨 차이가 있는거지? 

answer부분 빼고는 하나도 손대지 않았는데 효율성은 그렇다 쳐도 정확도에서 이렇게 차이가 날 수가 있나?

아직 잘 모르겠다

 

 

 

 

 

다른 풀이

 

1. zip()

zip(*iterable)은 동일한 개수로 이루어진 자료형을 순서대로 짝지어 튜플로 묶어 주는 역할을 하는 함수이다.

def solution(participant, completion):

    participant.sort()
    completion.sort()

    for par, com in zip(participant, completion) :
        if par != com :
            return par   

    return s[-1]         

파이썬 내장함수인 zip()을 사용한 풀이가 있었다. 내가 푼 것과 같은 방법이지만 이런 식으로도 쓸 수 있구나

 

 

2. Counter()

collections.Counter()의 결과값(return)은 딕셔너리 형태로 출력된다.

잘 몰라서 직접 찍어봤는데 몇 개가 있는지 딕셔너리 형태로 출력이 됐다. Counter는 덧셈 뺄셈도 된다.

 

import collections

def solution(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

 

 

3. hash()

hash() : return the hash value of the object (if it has one)

(사실 이 문제의 분류가 해시에 있는걸 봐서 이게 가장 적합한 풀이가 아니었나 싶다 .. )

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

hash(part)를 통해 해시값을 받고, 그 값들을 모두 더한 후 completion의 해시값의 합과 빼면 나오는 해시값이 답이다!

그 값이 스트링으로 뭔지 다시 바꾸기 위해 딕셔너리에 저장해서 마지막에 찾아주는 풀이다.

반응형