반응형
1차시도 리스트로 노가다
def solution(participant, completion):
answer=""
for i in participant:
if len(completion)==False:
answer=i
break
for j in range(len(completion)):
if i==completion[j]:
flag=True
completion.pop(j)
break
else:
flag=False
if flag==False:
answer=i
break
return answer
아이디어
- participant 참가자 한 명씩 completion 명단에 있는지 확인합니다.
- 있으면 그 다음 참가자가 확인하고, 없으면 completion 명단 끝까지 없는건지 확인합니다.
틀린이유
- 효율성 테스트 실패
- pop(j) 가 오래 걸릴 것이고, for문이 많습니다.
2차시도 딕셔너리 사용
def solution(participant, completion):
answer=""
dic_completion=dict(zip(completion,range(len(completion))))
for i in participant:
if i in dic_completion:
del dic_completion[i]
continue
else:
answer=i
break
return answer
아이디어
- 완주한 선수들 (completion)을 key값으로 하여 딕셔너리를 만듭니다.
- 참가 선수(participant) 한 명씩 딕셔너리 key값에 포함되어 있는지 판단합니다.
틀린이유
- 완주한 선수 중에 동명이인이 있는 경우를 처리하지 못했습니다.
- 완주한 선수를 key값으로 하는 딕셔너리를 만들 때, 중복되는 key는 1개만 들어가게 됩니다.
- sunny(1)라는 참가선수가 완주했을 때 del dic_completion["sunny"] 가 수행되면, sunny(2)라는 참가선수가 완주했음에도 불구하고 dic_completion key값에 sunny가 없으므로 완주하지 못했다고 나오게 됩니다.
다른 분들의 코드 (1)
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]
아이디어
- 배열을 정렬한 후에 비교합니다. (디폴트는 오름차순)
- return participant[len(participant)-1] 를 통해서 참가자 명단에 제일 마지막 선수가 완주하지 못하는 경우를 커버합니다.
- 저는 반복문을 빠져나올 때 break만 생각했었는데, 아예 return으로 함수 종료를 하면 되네요.
다른 분들의 코드 (2)
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
아이디어
- collections라는 모듈이 있다네요 .. 참
- 거기에 Counter라는 서브클래스가 있대요.. 참
- A Counter is a dict subclass for counting hashable objects.
파이썬개념
1) 리스트 정렬
sort() | sorted() |
a_list.sort() | new_list=sorted(a_list) |
기존의 리스트 자체를 정렬 |
기존 리스트에는 영향이 없음 새로운 리스트를 만들어 리턴함 |
2) collections.Counter()
import collections
a=["hi","sunny","hi"]
print(collections.Counter(a))
# Counter({'hi': 2, 'sunny': 1})
print(collections.Counter(a[1]))
# Counter({'s':1,'u':1,'n':2,'y':1})
반응형
'프로그래밍 > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스] KAKAO 2018 코딩테스트 - 실패율 (python) (2) | 2019.09.02 |
---|---|
[프로그래머스] 해시 - 전화번호 목록 (python) (2) | 2019.08.28 |
[프로그래머스] 스택/큐 주식가격 (python) (4) | 2019.08.26 |
[프로그래머스] 스택/큐 기능개발 (python) (4) | 2019.08.25 |
[프로그래머스] 스택/큐 다리를 지나가는 트럭 (python) (2) | 2019.08.22 |
댓글