Algorithm/Python

[해시] 완주하지 못한 선수

🥭맹2 2021. 4. 30. 06:32

1. 문제

programmers.co.kr/learn/courses/30/lessons/42576

 

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

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

programmers.co.kr

2. 접근 방법

해시로 접근을 해보았습니다.

 

1. participant의 이름들을 key값으로 갖는 hash를 만들어서 해당 key의 value는 해당 이름을 가진 사람들의 숫자입니다. (동명이인의 경우 +a, 아닌 경우 1)

2. completion을 반복하여 동명이인의 경우-1, 아닌 경우 해당 key를 완전히 빼버립니다.

3. 남은 key를 반환합니다.

3. 코드

python

def solution(participant, completion):
    hash=dict()
    for part in participant:
        if part in hash:
            hash[part] += 1
        else:
            hash[part] = 1
    for name in completion:
        if hash[name] == 1:
            del hash[name]
        else:
            hash[name] -= 1
    answer = list(hash.keys())[0]
    return answer

4. 마치며

프로그래머스는 사실 기출문제 말고는 안풀어봤는데, 되게 좋은거같습니다

풀이 후에 다른 사람의 풀이를 바로 볼 수 있다는 것 (좋아요 순으로 뜨는 것 같음)

 

ㅇㅣ런 풀이도 있네요 ,,

 

import collections


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

참고로 collections.Counter()의 경우,

컨테이너에 동일한 값의 자료가 몇개인지를 파악하는데 사용하는 객체라고 합니다.

return 값은 딕셔너리 형태로 출력된다고 하네욧

 

# collections.Counter 예제 1(리스트를 입력할 경우)

import collections

lst = ['aa', 'bb', 'cc', 'aa', 'bb']

print(collections.Counter(lst))

'''
결과
Counter({'aa': 2, 'bb': 2, 'cc': 1})
'''

# collections.Counter 예제 10(뺄셈을 사용할 경우)

b = ['aa', 'bb', 'cc']

print(collections.Counter(lst)-collections.Counter(b))

'''
결과
Counter({'aa': 1, 'bb': 1})
'''

collections.Counter 예제 출처 : excelsior-cjh.tistory.com/94

'Algorithm > Python' 카테고리의 다른 글

[해시] 위장  (0) 2021.05.01
[해시] 전화번호 목록  (0) 2021.04.30
[백준 11399] ATM  (0) 2021.04.28
[백준 1932] 정수 삼각형  (6) 2021.04.27
[swea 5650] 핀볼 게임  (0) 2021.04.24