반응형
1차시도
import collections
import operator
def solution(N, stages):
answer = []
user_stage=collections.Counter(stages)
fail={}
for i in range(1,N+1):
if user_stage[i]==0:
max_key=i
else:
del user_stage[i-1]
fail[i]=(sum(user_stage.values())/float(user_stage[i]))
stage_result=sorted(fail.items(), key=operator.itemgetter(1))
for i in range(len(stage_result)):
answer.append(stage_result[i][0])
answer.append(max_key)
return answer
2차시도 (런타임에러)
import collections
import operator
def solution(N, stages):
answer = []
user_stage=collections.Counter(stages)
fail={}
for i in range(1,N+1):
del user_stage[i-1]
fail[i]=(float(user_stage[i])/sum(user_stage.values()))
stage_result=sorted(fail.items(), key=operator.itemgetter(1),reverse=True)
for i in range(len(stage_result)):
answer.append(stage_result[i][0])
return answer
틀린이유
sum(user_stage.values())이 0이 되는 경우를 고려하지 못했습니다.
3차시도(런타임에러)
import collections
import operator
def solution(N, stages):
answer = []
user_stage=collections.Counter(stages)
fail={}
for i in range(1,N+1):
del user_stage[i-1]
fail[i]=(float(user_stage[i])/sum(user_stage.values()))
answer=sorted(fail, key=lambda k : fail[k], reverse=True)
return answer
틀린이유
sum(user_stage.values())이 0이 되는 경우를 고려하지 못했습니다.
4차시도(5개 케이스 틀림)
import collections
def solution(N, stages):
answer = []
user_stage=collections.Counter(stages)
fail={}
for i in range(1,N+1):
del user_stage[i-1]
if sum(user_stage.values())==0:
answer=sorted(fail, key=lambda k : fail[k], reverse=True)
answer.extend([i,N])
return answer
fail[i]=(user_stage[i]/sum(user_stage.values()))
answer=sorted(fail, key=lambda k : fail[k], reverse=True)
return answer
틀린 이유
제가 놓친 케이스가 무엇일까요 ㅠㅠ?
다른 분들의 풀이
def solution(N, stages):
result = {}
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
count = stages.count(stage)
result[stage] = count / denominator
denominator -= count
else:
result[stage] = 0
return sorted(result, key=lambda x : result[x], reverse=True)
제가 작성한 4차시도 코드와 로직이 같다고 생각하는데, 4차시도 코드에선 왜 틀렸을까요?ㅠㅠ
python 개념
1) 리스트에서 특정 값을 가진 요소 개수 count
a=[1,3,2,2]
print(a.count(2))
# 2
2) 딕셔너리 key 기준으로 정렬하기
요소값이 튜플인 리스트가 return 됩니다.
import operator
dict={3:2, 2:1, 1:4}
sdict = sorted(dict.items(), key=operator.itemgetter(0))
print(sdict)
# [(1,4),(2,1),(3:2)]
정렬된 딕셔너리에서 key값들만 있는 리스트가 return 됩니다.
sorted(dict, key=lambda k : k, reverse=True)
print(sorted)
#[1,2,3]
3) 딕셔너리 value 기준으로 정렬하기
요소값이 튜플인 리스트가 return 됩니다.
import operator
dict={3:2, 2:1, 1:4}
sdict = sorted(dict.items(), key=operator.itemgetter(1))
print(sdict)
# [(2,1),(3,2),(1:4)]
정렬된 딕셔너리에서 key값들만 있는 리스트가 return 됩니다.
sorted(dict, key=lambda k : fail[k], reverse=True)
print(sorted)
#[2,3,1]
4) lambda
def f2(x):
return x[1]
res = sorted(names.items(), key=f2)
print(res)
#lambda를 사용한 경우
res = sorted(names.items(), key=(lambda x: x[1]), reverse = True)
print(res)
반응형
'프로그래밍 > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스] kakao 2018 코딩테스트 - 후보키 (python) (4) | 2019.09.04 |
---|---|
[프로그래머스] kakao 2018 코딩테스트 - 오픈채팅방 (python) (4) | 2019.09.03 |
[프로그래머스] 해시 - 전화번호 목록 (python) (2) | 2019.08.28 |
[프로그래머스] 해시 - 완주하지 못한 선수 (python) (2) | 2019.08.27 |
[프로그래머스] 스택/큐 주식가격 (python) (4) | 2019.08.26 |
댓글