PS/프로그래머스

[Python] 완주하지 못한 선수

s_omi 2024. 10. 29. 09:05

✏️ 문제

 

문제 파악

처음엔 for in 돌아서 있으면 pop() 메소드를 사용해서 나머지 남은 이름을 출력하도록 코드를 짰는데 성능 테스트에서 다 시간 초과가 났다..

그래서 Counter 자료구조를 사용해서 쉽게 풀었다..!  (근데 이 문제는 해시 문제라서 해시로도 풀어봐야지..)

 

 

코드

  • 실패한 코드 
def solution(participant, completion):
    for c in completion:
        if c in participant:
            participant.pop(participant.index(c))
            
    return participant[0]
  • 성공한 코드 
from collections import Counter

def solution(participant, completion):
    participant_count = Counter(participant) # Counter({'leo': 1, 'kiki': 1, 'eden': 1})
    completion_count = Counter(completion)   # Counter({'eden': 1, 'kiki': 1})
    
    answer = participant_count - completion_count # Counter({'leo': 1})
    return list(answer.keys())[0]
  • 해시함수 사용 

 

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
  • 해시함수 사용 X 
def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]
            
    return participant[len(participant)-1]

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 둘만의 암호  (0) 2024.10.29
[Python] 대충 만든 자판  (0) 2024.10.29
[Python] 실패율  (0) 2024.10.27
[Python] 9번 / 지폐 접기  (0) 2024.10.27
[Python] [1차] 다트 게임  (3) 2024.10.27