Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 주식
- jwt 표준
- 셀러리
- gRPC
- 프로그래머스
- spring event
- AWS
- 결제서비스
- 누적합
- 트랜잭샨
- 좋은 코드 나쁜 코드
- piplining
- 객체지향패러다임
- prg 패턴
- 쿠키
- 알람 시스템
- 카카오
- 깊게 생각해보기
- 레디스 동시성
- BFS
- branch 전략
- 숫자 블록
- 완전탐색
- JPA
- 검색어 추천
- 이분탐색
- docker
- 구현
- 백준
- 디버깅
Archives
- Today
- Total
코딩관계론
[프로그래머스] H-index 본문
반응형
문제 이해하기
H-index를 찾는 문제로, h-index는 n번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용됐다면 h의 최댓값이 이 과학자의 H-index입니다
예를들면[3 0 1 6 1 5]가 있다면 3이 h-index가 됨
주의할 점은 배열에 있는 값만 h-index가 되는게 아니기 때문에 최대 값을 기준으로 h-index(0 1, 2, 3, 4, 5, 6)를 탐색해야 합니다.
문제 해결 방법 설명하기
1. 정렬
h번 이상 인용된 논문이 h개 이상이라는 것을 찾기 위해서 정렬을 수행했습니다. 이는 특정 인덱스를 기준으로 이후에 나오는 값은 모두 특정 인덱스의 값보다 크기 때문에 h번 이상이라는 것을 찾기가 쉽습니다.
citations.sort() #정렬한 후
max_reference = max(citations)
for i in range(max_reference + 1):
idx = bisect.bisect_left(citations, i)
if i <= len(citations) - idx: #찾아진 인덱스의 값을 이용해서 h번 이상인지 판별함
answer = i
2. 이분탐색으로 찾기
이분탐색을 사용한 이유는 배열에서 특정 값을 빠르게 찾을 수 있기 때문입니다.
for i in range(max_reference + 1):
idx = bisect.bisect_left(citations, i) #citations 배열에서 i번 이상 인용된 논문의 값이 이상이 되는 최초의 인덱스를 찾음
if i <= len(citations) - idx:
answer = i
return answer
코드
import bisect
def solution(citations):
answer = 0
citations.sort()
max_reference = max(citations)
for i in range(max_reference + 1):
idx = bisect.bisect_left(citations, i)
if i <= len(citations) - idx:
answer = i
return answer
if __name__ == "__main__":
citations = [3, 0, 6, 1, 5]
solution(citations)
코드 리뷰
def solution(citations):
sorted_citations = sorted(citations, reverse=True)
for i in range(len(sorted_citations)):
if sorted_citations[i] <= i:
return i
return len(sorted_citations)
배운점 정리하기
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 아이템 줍기 (0) | 2024.04.14 |
---|---|
[프로그래머스] 징검다리 (0) | 2024.04.13 |
[프로그래머스] 등대 (0) | 2024.04.09 |
[카카오 프로그래머스] 주사위 고르기 (0) | 2024.04.07 |
[카카오 프로그래머스] 도넛과 막대 (0) | 2024.04.04 |