Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 알고리즘 자동 업로드
- Django cycle
- python웹개발
- SQL
- 코딩테스트
- sql정리
- 통신인터페이스
- 설문조사앱
- matlab 디지털신호처리
- Django
- Django웹서버개발
- 왜 개발이 하고싶은가
- 알고리즘풀이
- 웹개발
- 디지털신호처리설계
- programmers
- 프로그래머스
- 쿼리문법
- Django웹개발
- N으로 표현
- bandpass filter
- select
- 데이터필드
- 완주하지 못한 선수
- embeddedSW
- 자동 commit
- 링크필드
- Django DB
- MTV패턴
- Django서버
Archives
- Today
- Total
카이로스의 시간
[해시] 완주하지 못한 선수 본문
문제링크: https://programmers.co.kr/learn/courses/30/lessons/42576
사용 알고리즘: 해시
풀이:
python dictionary를 이용해서 해시테이블에 데이터를 넣고, 비교하는 방식으로 구현했습니다.
participant, completion 이라는 참가자, 완주자 list를 dictionary로 정리했으며, 이때는 동명이인을 구분하기 위해서
value 값을 하나씩 높였습니다.
예를 들어서,
participant = ["mislav", "stanko", "mislav", "ana","ana","ana"]
라는 참가자 list가 주어지면 dic_participant에 {'mislav': 1, 'stanko': 0, 'ana': 2} 와 같이
{참가자이름:동명이인숫자}로 정의했습니다.
동일하게 completion도 정리하고 반복문으로 key:value를 비교했습니다.
def solution(participant, completion):
answer = ''
dic_participant = {}
dic_completion = {}
for name in participant:
if name in dic_participant.keys():
dic_participant[name] = dic_participant[name] + 1
else:
dic_participant[name] = 0
for name in completion:
if name in dic_completion.keys():
dic_completion[name] = dic_completion[name] + 1
else:
dic_completion[name] = 0
for name in dic_participant.keys():
if name in dic_completion.keys():
if dic_completion[name] == dic_participant[name]:
pass
else:
answer = name
return answer
채점결과는 무난히 통과했습니다.
그런데 다른사람들 풀이를 보니 엄청 간단하게 구현했더군요.
다른사람들 풀이에서는 collections를 import해서 Counter 클래스로 아래처럼 구현했습니다.
그런데 다른사람들 풀이를 보니 엄청 간단하게 구현했더군요.
다른사람들 풀이에서는 collections를 import해서 Counter 클래스로 아래처럼 구현했습니다.
import collections
def solution2(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
Counter 클래스는 string에서 문자 또는 list에서 string의 개수를 쉽게 dictionary로 정리할 수 있습니다.
string='aaabbccabc'
print (collections.Counter(string))
Counter({'a': 4, 'b': 3, 'c': 3})
list가 인풋인 경우, 중복되는 string의 개수를 dictionary로 정리합니다.
participant = ["mislav", "stanko", "mislav", "ana"]
print (collections.Counter(participant))
Counter({'mislav': 2, 'stanko': 1, 'ana': 1})
최종적으로 Counter dictionary끼리 빼는 동작으로 value차이가 1인(count가 1개 차이인)
key, value쌍을 추출할 수 있습니다.
answer = collections.Counter(participant) - collections.Counter(completion)
print (answer)