[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42747
[풀이]
1. for문을 통해 i=1부터 citations의 개수만큼 돌면서 i 별로 i번이상 인용된 논문을 세어서 그 개수가 i 이상이라면 H-Index의 후보다.
2. 그 중 가장 큰 값이 H_Index가 된다.
3. 시간복잡도가 n^2으로 비효율적이다.
def solution(citations):
n = len(citations)
h_index = 0
for i in range(1, n+1):
count = 0
for e in citations:
if e >= i:
count += 1
if count >= i:
h_index = max(h_index, i)
return h_index
[풀이]
1. citations(논문별 인용 횟수)를 내림차순한다.
2. enumerate() 함수를 통해 해당 인용 횟수별로 번호를 부여하면, 인용 횟수번 이상의 논문의 수가 몇개인지 한번에 파악할 수 있다. 이때 start=1 매개변수를 주어 1부터 시작하게 만든다.
[6, 5, 3, 1, 0]
[1, 2, 3, 4, 5] : enumerate(citations, start=1) 적용시
6번 이상 인용된 논문의 개수 → 1 : (6, 1)
5번 이상 인용된 논문의 개수 → 2 : (5, 2)
3번 이상 인용된 논문의 개수 → 3 : (3, 3)
1번 이상 인용된 논문의 개수 → 4 : (1, 4)
0번 이상 인용된 논문의 개수 → 5 : (0, 5)
3. h번 이상 인용된 논문이 h편 이상이어야 하므로 각 튜플에 min 함수를 적용해주자.
4. 그 중 가장 큰 값이 H_Index가 된다.
def solution(citations):
citations.sort(reverse=True)
return max(map(min, enumerate(citations, start=1)))
'코딩 테스트 > Python' 카테고리의 다른 글
87. n^2 배열 자르기 (0) | 2025.01.12 |
---|---|
85. 연속 부분 수열 합의 개수 (1) | 2025.01.08 |
83. 귤고르기 (0) | 2025.01.06 |
82. 멀리 뛰기 (1) | 2025.01.05 |
신고 결과 받기 (0) | 2025.01.02 |