일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- programmers
- python3
- PANDAS
- 프로그래머스
- 머신 러닝
- Heap
- 회귀
- 파이썬
- Seq2Seq
- db
- 데이터베이스
- GIT
- C++
- 국민대학교
- machine learning
- OS
- 스택
- 재귀
- LSTM
- Stack
- Python
- gan
- Regression
- kmu
- SQL
- googleapiclient
- instaloader
- 국민대
- 운영체제
- 정렬
Archives
- Today
- Total
정리 노트
프로그래머스 H-Index(Python) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42747#
이 문제는 어렵지는 않지만 H-Index 개념 자체를 이해하는데 너무 많은 시간을 소모했던 문제였다.
H-Index란?
프로그래머스 문제에서는 다음과 같이 설명한다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면
h의 최댓값이 이 과학자의 H-Index입니다.
글로만 설명이 되어있고 테스트 케이스도 한 개만 주어져서 쉽게 이해하기 힘들었다.
직접 예시를 들어보자.
과학자가 발표한 논문의 개수가 5편(n = 5)이고 각 논문이 인용된 횟수들(citations)을 리스트에 담아 표현해보자.
citations = [4, 7, 0, 10, 5]
위 리스트를 보기 좋게 정렬을 시키자.
citations = [10, 7, 5, 4, 0]
- 10번(h) 이상 인용된 논문의 개수는 1편(h1)이다. h > h1
- 7번(h) 이상 인용된 논문의 개수는 2편(h1)이다. h > h1
- 5번(h) 이상 인용된 논문의 개수는 3편(h1)이다. h > h1
- 4번(h) 이상 인용된 논문의 개수는 4편(h1)이다. h <= h1
- 0번(h) 이상 인용된(한 번이라도 인용된) 논문의 개수는 5편(h1)이다. h <= h1
H-Index 정의에 만족하려면 h <= h1을 만족하는 h의 최대값을 구해야한다. 위의 예시에서는 4가 H-Index가 된다.
구현
H-Index의 정의에 맞춰서 구현을 한 코드는 아래와 같다.
def solution(citations):
citations.sort(reverse=True)
paper_cnt = len(citations)
answer = 0
for i in range(paper_cnt):
if citations[i] < i + 1:
answer = i
break
else:
answer = paper_cnt
return answer
citations[i] < i + 1을 만족하는 경우가 하나도 없는 경우에 대한 예외 처리를 위해 for-else 문으로 구현했다.
citations = [16, 7, 5]
citations가 위 처럼 주어지면 if문을 만족하는 경우가 하나도 없게 된다. 이런 경우, H-Index 값은 논문의 수와 같기 때문에 else 문에서 H-Index 값을 논문의 수로 설정한다.
728x90
'프로그래머스 코딩테스트 연습' 카테고리의 다른 글
프로그래머스 신규 아이디 추천(Python) (0) | 2022.06.22 |
---|---|
프로그래머스 신고 결과 받기(Python) (0) | 2022.06.22 |
프로그래머스 로또의 최고 순위와 최저 순위(Python) (0) | 2022.06.22 |
프로그래머스 전화번호 목록(Python) (0) | 2022.06.21 |
프로그래머스 디스크 컨트롤러(Python3) (0) | 2022.06.21 |