포시코딩

[프로그래머스][Lv.1][해시] 완주하지 못한 선수* 본문

카테고리 없음

[프로그래머스][Lv.1][해시] 완주하지 못한 선수*

포시 2023. 1. 17. 23:48
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 오답 풀이

정확성 쪽으론 맞지만 효율성 즉, 입력되는 데이터가 많을 경우 걸리는 시간이 길어져 결국 오답 처리된 코드들이다.

def solution(participant, completion):
    for x in completion:
        participant.remove(x)
    return participant[0]

 

def solution(participant, completion):
    for x in participant:
        if x in completion:
            completion.remove(x)
        else:
            return x

 

def solution(participant, completion):
    participant.sort()
    completion.sort()
    print(participant, completion)
    for i, e in enumerate(participant):
        try:
            if e != completion[i]:
                return participant[i]
        except:
            return participant[-1]

이 풀이도 원래 정답인데 중간에 print문이 있어서 안된거였다 ㅠ

 

내 정답 풀이

def solution(participant, completion):
    dict = {}
    for x in participant:
        if x in dict:
            dict[x] += 1
        else:
            dict[x] = 1
    for y in completion:
        if dict[y] > 1:
            dict[y] -= 1
        else:
            del dict[y]
    for result in dict.keys():
        return result

해시 문제라는 점에서 힌트를 얻어

예전에 Python에서 dict를 해시 대신 사용할 수 있다는 생각과 

해시 공부하며 정리한 글에 도움을 받아 코드를 작성하니 정확성, 효율성 모두 정답 처리가 나왔다.

 

나중에 다시 안보고도 바로 풀 수 있게 메모해놔야겠다.

 

다른 풀이 A

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]

그나마 내가 푼 코드와 비슷해서 가져왔는데 살짝 달라 메모

 

다른 풀이 B

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

이 풀이가 제일 문제 출저 의도와 맞지 않을까 싶다.

각 participant들의 hash값을 dict에 넣은 후 

temp로 수의 가감을 이용해 마지막 남는 하나의 값을 찾아내는 방식.

 

 

Python의 Collection과 Counter를 이용한 방법은 문제 출제 의도와 다른거 같아 생략

728x90