뭔가 알 것 같은데 못 푸는 느낌
1. 내 풀이
ㅋㅋㅋㅋ 그냥 못 푼 풀이
def solution(N, stages):
count_sort = [0] * (N+1)
for i in range(0, stages):
stages[0]
tmp = sorted(stages)
for i in range(1, N+1):
answer = []
return answer
1-1. 풀이 도중 생각
1) 실패율 = (해당 스테이지에 머물러 있는 사람) / (해당 스테이지에 있는 사람 + 그 이상에 있는 사람)
2) 스테이지를 인덱스로 가지는 계수 정렬이 필요하려나?
3) 낮은 순으로 정렬한 다음에 분수 계산 하면 될 것 같은데 그걸 어떻게 해야는지 감이 안 잡히네
2. 정답
Hr.... count()라는 함수가 있는지 알았다면 조금 더 잘 풀 수 있었을 것 같은데 아쉽다
def solution(N, stages):
answer = []
length = len(stages)
# 스테이지 번호를 1부터 N까지 증가시키며
for i in range(1, N+1):
# 해당 스테이지에 머물러 있는 사람 수 계산
count = stages.count(i)
# 실패율 계산
if length == 0:
fail = 0
else:
fail = count / length
# 리스트에 (스테이지 번호, 실패율) 원소 삽입
answer.append((i, fail))
# length 조정
length -= count
# 실패율을 기준으로 각 스테이지를 내림차순 정렬
answer = sorted(answer, key = lambda t: t[1], reverse=True)
# 스테이지 번호만 출력
answer = [i[0] for i in answer]
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.keys(), key=lambda x : result[x], reverse=True)
sorted에 dictionary인 result를 그냥 넘기면 keys가 반환, keys는 생략이 가능하다는데 신기방기
3. 새로 알게 된 것 or 새삼 다시 알게 된 것
1) count() 함수의 존재여부. 찾고 싶은 문자의 개수 혹은 숫자의 개수를 찾아준다 '변수.count()'로 사용가능
튜플, 리스트, 집합과 같은 iterable 자료형에서도 사용가능하지만, dictionary, set에서는 사용 불가함
2) dictionary에서 value를 기준으로 정렬할 때 lambda x: item[x]와 같은 형식으로 가능
'CS > 알고리즘' 카테고리의 다른 글
[이코테] 다이나믹 프로그래밍 - 개미 전사 (0) | 2023.02.22 |
---|---|
[이코테] 다이나믹 프로그래밍 - 1로 만들기 (0) | 2023.02.21 |
[이코테] 정렬 - 안테나 (0) | 2023.02.12 |
[이코테] 정렬 - 국영수 (0) | 2023.02.11 |
[이코테] 정렬 - 두 배열의 원소 교체 (0) | 2023.02.10 |