https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=python3
# trial 1 -> 실패
from collections import Counter
def solution(citations):
cntls = Counter(citations)
sorted_cntls = sorted(cntls.items(), key=lambda x: x[0], reverse=True)
accum_cnt = 0
for k, v in sorted_cntls:
accum_cnt += v
if accum_cnt >= k:
return k
return accum_cnt
# trial 2 -> 성공
from collections import Counter
def solution(citations):
cntls = Counter(citations)
sorted_cntls = sorted(cntls.items(), key=lambda x: x[0], reverse=True)
accum_cnt = 0
for k, v in sorted_cntls:
if accum_cnt >= k:
return accum_cnt
accum_cnt += v
if accum_cnt >= k:
return k
return accum_cnt
# 타인 코드 참조 후 수정
- 현재시점(인용횟수 n) 포함해서 총 남은 편수(=n 이상의 인용횟수를 갖는 편수)가 현재의 인용횟수보다 클 경우를 조건으로 해서, 같거나 넘치는 순간 그 편수를 반환하는 원리
def solution(citations):
citations = sorted(citations)
papers = len(citations)
for i in range(papers):
if citations[i] >= papers-i:
return papers-i
return 0
[개선할 점]
- greedy하지 않게 규칙성을 찾는 연습이 필요하다.
- 다양한 반례를 스스로 찾는 연습이 필요하다.
# 추가적으로 사용한 테스트케이스
tests = [
([0], 0),
([3, 4], 2),
([1, 2, 3, 5, 6, 7, 10, 11], 5),
([3, 5, 11, 6, 1, 5, 3, 3, 1, 41], 5),
([1, 11, 111, 1111], 3),
([5,6,7,8], 4)
]
'codes > programmers' 카테고리의 다른 글
87946 피로도 (1) | 2025.01.07 |
---|---|
42746 가장 큰 수 (0) | 2024.12.31 |
42583 다리를 지나는 트럭 (1) | 2024.12.30 |
42578 의상 (0) | 2024.12.27 |
42584 주식가격 (1) | 2024.12.27 |