본문 바로가기
Algorithm/해시

[프로그래머스 lv1] 완주하지 못한 선수

by HANNI하니 2023. 5. 29.

사용 언어 - Python3

문제 - 완주하지 못한 선수

 

프로그래머스

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

programmers.co.kr

 

 

 

정답

시간초과 => 해시 사용하기 (정답 맞춘 여부 X)

# 방법1 시간초과
def solution(participant, completion):
    answer = ''
    
    for p in participant:
        if p in completion:
            completion.remove(p)
        else:
            answer += p
    
    
    return answer
# 방법2 시간초과
def solution(participant, completion):
    answer = ''
    key = []
    value = []
    for p in participant:
        pnum = participant.count(p)
        cnum = completion.count(p)
        if pnum != cnum:
            num = pnum-cnum
            if p not in value:
                key.append(num)
                value.append(p)
    
    for i in range(len(key)):
        answer += key[i]*value[i]
    
    return answer

hash 사용하기

1. dictionary의 key, value 처럼 hashDict에 {hash(p),p}를 저장한다.

2. sumHash로 hash(p) 값을 다 더했다가  hash(c) 값을 다 빼면 나머지 완주하지 못한 해쉬값만 남는다.

3. hashdict[sumHash]

# 정답 = hash 해시 사용
def solution(participant, completion):
    hashDict = {}
    sumHash = 0
    
    for p in participant:
        hashDict[hash(p)] = p
        sumHash += hash(p)

    for c in completion:
        sumHash -= hash(c)

    return hashDict[sumHash]

 

 

레퍼런스

  • 해시 설명
 

[프로그래머스] 완주하지 못한 선수 문제 풀이(해시 Lv. 1) - 파이썬 Python

0. 동일 유형 문제 [프로그래머스] 완주하지 못한 선수 (해시 Lv. 1) [프로그래머스] 전화번호 목록 (해시 Lv. 2) [프로그래머스] 위장 (해시 Lv. 2) [프로그래머스] 베스트 앨범 (해시 Lv. 3) Youtube 영상으

coding-grandpa.tistory.com

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글