일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택
- 자료구조
- transformer
- OpenCV
- 논문 구현
- Object Detection
- level2
- 딥러닝
- re-identification
- cv2
- 프로그래머스
- 임계처리
- Knowledge Distillation
- reconstruction
- attention
- 알고리즘
- Python
- deep learning
- flame
- numpy
- point cloud
- 파이썬
- Computer Vision
- 큐
- center loss
- Deeplearning
- Object Tracking
- 3D
- NLP
- Threshold
- Today
- Total
공돌이 공룡의 서재
[프로그래머스 Level 1] 완주하지 못한 선수 / 해시 / 파이썬 본문
<문제>
해시(Hash) 구조:
어떤 값을 찾고자 할 때 쓰고 고유한 key와 그 key에 해당하는 값이 저장되는 구조다.
Big-O로는 O(1) 에 해당한다.
파이썬에서는 dictionary로 이를 구현할 수 있다.
<풀이>
def solution(participant, completion):
runners = {}
for runner in participant: # 이름(key) - 동명이인 수(value) dictionary
if runner not in runners:
runners[runner] = 1
else:
runners[runner] += 1
for runner in completion:
runners[runner] += -1
if runners[runner] == 0:
del runners[runner]
ans = list(runners.keys())[0]
return ans
코드 설명:
동명이인이 있을 수 있기 때문에 첫 for문 loop에서는 참가자 정보가 담긴 리스트를 탐색하여 참가자 이름 - 동명이인의 수(없으면 1) 를 key-value pair로 하는 dictionary를 만들었다. 두 번째 for문 loop에서는 완주자 정보가 담긴 리스트를 탐색하는데, 완주자 이름에 해당하는 value를 1씩 빼고 value 가 0이되면 dictionary에서 key-value pair를 지운다. for문을 빠져나오면 runners는 {완주하지 못한 선수 이름:1} 가 된다. return해야할 값은 선수 이름이므로 key값을 가져오게 했다.
+@:
dictionary에서 key값에 value를 mapping(저장)하는 방법
dict = {}
dict[key] = value
+@:
del 을 이용하면 dictionary의 key - value pair을 지울 수 있다.
dict = {'a':1, 'b':2, 'c':3}
del dict['a']
# 결과: dict = {'b':2, 'c':3}
+@:
return 하기전에 runners.keys() 의 타입이 dict_keys 타입이라서 안의 값을 바로 읽으려하면
TypeError: 'dict_keys' object is not subscriptable 가 뜨게 된다. 따라서 list로 타입을 바꿔준 다음 읽게 했다.
##
def solution(participant, completion):
answer= ''
P = sorted(participant) # O(nlogn)
C = sorted(completion) # O(nlogn)
C.append('..') # 리스트 크기 1 차이나서 index 초과 에러 방지용
for i in range(len(P)): # O(n)
if P[i] != C[i]:
answer = P[i]
break
return answer
자료구조를 공부하기 전에는 for문이나 if문 같은 기본적인 문법구조만 알던 때라 sort방법으로 풀었다. 하지만 sort 는 기본적으로 O(nlogn)이기 때문에 리스트 크기가 커질수록 시간효율성이 떨어진다.
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 1] 문자열 내 마음대로 정렬하기 / 연습문제 / 파이썬 (0) | 2020.08.16 |
---|---|
[프로그래머스 Level 1] 같은 숫자는 싫어 / 연습문제 / 파이썬 (0) | 2020.08.16 |
[프로그래머스 Level 1] K번째수 / 정렬 / 파이썬 (0) | 2020.07.15 |
[프로그래머스 Level 1] 체육복 / 탐욕법 / 파이썬 (0) | 2020.07.09 |
[프로그래머스 Level 1] 모의고사 / 완전탐색 / 파이썬 (0) | 2020.07.05 |