새소식

⌨️ Algorithms/프로그래머스

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

2022. 8. 15. 18:57

  • -

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

 

프로그래머스

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

programmers.co.kr

 

"""
입출력 예시)

participant = ["leo", "kiki", "eden"], completion = ["eden", "kiki"] -> "leo"
participant = ["marina", "josipa", "nikola", "vinko", "filipa"], completion = ["josipa", "filipa", "marina", "nikola"] -> "vinko"
participant = ["mislav", "stanko", "mislav", "ana"], completion = ["stanko", "ana", "mislav"] -> "mislav"
"""

def solution(participant, completion):
    answer = ''
    for p in participant:
      if p not in completion:
        answer = p
    return answer

 

-> 내가 푼 방법으로는 참가자 중에 동명이인이 있을 경우에 대해 처리하지 못함...

 

 

 

 


  • 방법 1) collections.Counter() 사용
from collections import Counter

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

 

  • Counter(participant), Counter(completion), list((Counter(participant) - Counter(completion)).keys())) 확인
# participant = ["mislav", "stanko", "mislav", "ana"]
# completion = ["stanko", "ana", "mislav"]

"""
Counter(participant): Counter({'mislav': 2, 'stanko': 1, 'ana': 1})

Counter(completion): Counter({'stanko': 1, 'ana': 1, 'mislav': 1})

list((Counter(participant) - Counter(completion)).keys())): ['mislav']
"""

 

  • collections.Counter() 설명 참고

https://velog.io/@kimdukbae/Python-collections-%EB%AA%A8%EB%93%88%EC%9D%98-Counter

 

[Python] collections 모듈의 Counter

collections 모듈의 Counter 클래스는 컴퓨터 과학에서의 자료구조는 아니다. 하지만, Python 언어에서 지원하는 자료구조라고 생각했기에 자료구조 시리즈에 글을 포스팅하게 되었다.collections 모듈의

velog.io

 

 

 


  • 방법 2) hash 사용
def solution(participant, completion):
    answer = ''
    temp = 0
    dic = {}

    for p in participant:
      dic[hash(p)] = p # dic = {hash(p): 'p'}
      temp += hash(p) # temp = temp + hash(p)

    for c in completion:
      temp -= hash(c) # temp = temp - hash(c)

    answer = dic[temp]

    return answer

 

-> 동일한 'misalv'라는 이름은 participant 리스트에 있으나 completion 리스트에 있으나 같은 hash 값을 가진다는 hash의 특징 활용

 

 

  • hash, dic 확인 
# participant = ["mislav", "stanko", "mislav", "ana"]
# completion = ["stanko", "ana", "mislav"]

"""
p: mislav
hash(p): -1328427996545938244
dic: {-1328427996545938244: 'mislav'}
temp: -1328427996545938244

p: stanko
hash(p): -4704244479607317033
dic: {-1328427996545938244: 'mislav', -4704244479607317033: 'stanko'}
temp: -6032672476153255277

p: mislav
hash(p): -1328427996545938244
dic: {-1328427996545938244: 'mislav', -4704244479607317033: 'stanko'}
temp: -7361100472699193521

p: ana
hash(p): -8358854611270094177
dic: {-1328427996545938244: 'mislav', -4704244479607317033: 'stanko', -8358854611270094177: 'ana'}
temp: -15719955083969287698

_____________________________________________________________________________________________________________

c: stanko
hash(c): -4704244479607317033
temp: -11015710604361970665

c: ana
hash(c): -8358854611270094177
temp: -2656855993091876488

c: mislav
hash(c): -1328427996545938244
temp: -1328427996545938244

_____________________________________________________________________________________________________________

dic: {-1328427996545938244: 'mislav', -4704244479607317033: 'stanko', -8358854611270094177: 'ana'}
"""

 

 

 

 

 

참고) 

 

https://leedakyeong.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Python-%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%9C-%EC%84%A0%EC%88%98

 

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

(Python 코딩테스트 연습) Programmers 완주하지 못한 선수 파이썬으로 풀어보기 https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3# 코딩테스트 연습 - 완주하지 못한 선수 수많은 마..

leedakyeong.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!