[프로그래머스] H-Index 📇 (Python) / level2 / 정렬
- Programming/알고리즘
- 2022. 10. 23.
1. 문제🔥
링크: https://school.programmers.co.kr/learn/courses/30/lessons/42747
과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 주어집니다. 발표한 논문 n편 중, h번 이상 인용된 논문이 h 편 이상이고, 나머지 논문이 h번 이하 인용되었다는 조건을 만족하는 h의 최댓값을 반환해야 합니다.
1) 예제 입출력❄️
2. 핵심 논리☢️
citations를 정렬하고, 이분 탐색을 이용해 0부터 citations의 길이만큼 h로 반복하며, 인용횟수가 h 이상인 논문의 개수를 bisect(이분 탐색)을 이용해서 구하는 것이 핵심입니다.
(bisect_left는 아래 글에서 개념을 설명하고 있습니다.)
2022.03.26 - [Programming/알고리즘] - [백준] (12015, 12738) - 가장 긴 증가하는 부분 수열2,3 (Python - bisect)
3. 풀이 코드✅
from bisect import bisect_left
def solution(citations):
citations.sort()
result=0
for h in range(len(citations)+1):
h_papers = len(citations[bisect_left(citations, h):])
if h_papers >= h:
result = h
return result
citations를 정렬하고, h의 최대값을 반환할 변수 result를 0으로 초기화합니다. 0부터 len(citations)+1 만큼 h(인용 횟수)로 반복합니다. len(citations[bisect_left(citations, h):]) 부분은 인용 횟수 h 이상인 논문의 개수를 의미합니다. 인용 횟수 h가 citations에 들어갈 부분에서 리스트의 끝까지 :로 슬라이 싱하여 길이를 구하는 원리입니다. 다음에 조건문에서 h_papers(인용 횟수가 h 이상인 논문의 개수)가 h이상이면 result=h를 넣어줍니다. for문이 h에 대해 점점 커지며 반복하기 때문에 result=max(result, h)가 아니라 result=h 만 해줘도 됩니다.
읽어주셔서 감사합니다.
다음에 더욱 유익한 글로 찾아오겠습니다.
* 관련 풀이 코드는 아래 깃허브 링크에 있습니다.
Reference)
1. Programmers Logo: https://programmers.co.kr/
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 2143 - 두 배열의 합 🍻 (Python) / 골드 3 / 2가지 풀이 (Counter, bisect) (0) | 2022.10.29 |
---|---|
[백준] 11000 - 강의실 배정 🏫 (Python) / 골드 5 / 정렬 (0) | 2022.10.24 |
[프로그래머스] 가장 큰수 🐳 (Python) / level2 / 정렬 (0) | 2022.10.22 |
[백준] 1202 - 보석 도둑 💎 (Python) / 골드 2 / 정렬 / 그리디 (0) | 2022.10.21 |
[프로그래머스] 네트워크 🌐 (Python) / level3 / DFS (0) | 2022.10.14 |