알고리즘/프로그래머스

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

정석이 2022. 3. 20. 21:54

 

https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3 

 

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

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

programmers.co.kr

 

 

 

 

문제

 

 

 


 

 

그냥 리스트 쓰려고 했는데

 

 

 

 

효율성 틀림

def solution(participant, completion):
    for i in completion:
        participant.remove(i);
    return ''.join(participant)

 

 

 

ㅠㅠ

 

 

 

 

해시 문제니까 딕셔너리를 써보려고욧

 

 

def solution(participant, completion):
    no_dict = dict()
    
    for i in participant:
        if i not in no_dict:
            no_dict[i] = 1
        else:
            no_dict[i] += 1  # 동명이인 때문에..
            
    for i in completion:
        if i in no_dict:
            no_dict[i] -= 1
    
    
    return ''.join(x for x in no_dict if no_dict[x] > 0)

 

 

 

 

성능

 

 

 

딕셔너리가 효율성이 좋긴 하다~

 

 

 

 


 

남의 풀이

 

 

 

 

 

 

 

음 collections 모듈의 Counter라는 함수를 이용하면 단어에 포함된 글자수와 딕셔너리를 만들어준다.

 

 

리스트에 저걸 사용하면 그 단어 자체와 딕셔너리를 만들어준다.

 

 

코드 써서 확인해봄

 

 

counter로 만든 딕셔너리끼리는 빼기(-)를 진행할 수 있어서 value와 잘 빼서..0이면 없애주는구나...신기하다.

 

 

더하기, 빼기, 교집합, 합집합 등의 기능을 사용할 수 있다고 한다.

 

 

 

 

 

 

 

 

 

아 완주 못한넘이 1명이니까 그냥 sort() 해서 안맞는넘 출력해주면 된다. 흑흑.......

 

완주 못한넘이 맨 뒤에 있으면 맨 마지막 넘을 출력함. 저거는 음~ participant[-1] 일케 써도 된다.