문제
내가 푼 풀이
def solution(citations):
answer = 0
citations = sorted(citations, reverse = True)
h = max(citations)
while 1:
cnt = 0
for i in citations:
if i >= h:
cnt += 1
if cnt >= h:
answer = h
break
h -= 1
return answer
✔ 처음에 작성한 코드는 테스트 케이스는 통과해도 제출하면 실패가 떴다ㅠ. 문제를 잘못 이해해서 그런 거 였다. 답이 citations안에 있어야한다고 생각했는데 그게 아니었다! 그걸 깨닫고 나니 어떻게 풀어야 할지 생각이 났다.
그렇게 잘 짠 코드는 아닌 것 같다..ㅠ 그래도 맞춰서 기쁘긴 하네...😂
좋아요가 가장 많았던 풀이
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
하 이런 풀이들 볼 때마다 공부한다고 늘긴 하는 걸까 싶다..그래두..꾸준히 공부해나가야겠지....
✔ enumerate()
🙊 start는 여기서 처음 봤다!
✔ map()
print(list(map(min, enumerate(citations, start=1)))) #citations = [6, 5, 3, 1, 0]
출력 : [1, 2, 3, 1, 0]
=> 각각 index와 value 중에서 작은 값을 반환한다.
(1, 6) => 6번 이상 인용된 논문 개수 : 최소 1개 이상
(2, 5) => 5번 이상 인용된 논문 개수 : 최소 2개 이상
(3, 3) => 3번 이상 인용된 논문 개수 : 최소 3개 이상
(4, 1) => 1번 이상 인용된 논문 개수 : 최소 1개 이상
(5, 0) => 0번 이상 인용된 논문 개수 : 최소 5개 이상
🔑 즉, h값들의 집합이 된다!!
=> max(map(min, enumerate(citations, start=1)))는 min들(h들) 중에서 제일 큰 값을 반환. 3!!!!!
citations를 내림차순으로 정렬했으니까 결국 인덱스는 개수가 되기 때문.
어떻게 이런 생각을 하지??놀랍다..