오늘의 학습 키워드: 리스트
문제: H-Index
https://school.programmers.co.kr/learn/courses/30/lessons/42747#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
H인덱스에 대한 개념을 이해하는 게 가장 어려웠던 문제다.
주어진 citations 은 각 논문의 인용 횟수를 말한다.
어떤 과학자가 발표한 논문 n편 중,
h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면
h의 최댓값이 이 과학자의 H-Index입니다.
일단 그럼 n번 인용된 논문을 파악해 본다. 이해를 위해 정렬을 우선 수행한다. [0,1,3,5,6]
1번 인덱스의 인용 횟수: 0회 / 0회 이상 인용된 논문의 수 5개 / 5편 이상 인용된 논문이 5편 이상이다.
=> 1,3 은 5편 이하로 인용되었다. => false
2번 인덱스의 인용 횟수: 1회 / 1회 이상 인용된 논문의 수 4개 / 4편 이상 인용된 논문이 4편 이상이다
=> 1,3은 4편 이하로 인용되었다. => false
코드의 동작 예시
i = [1,3]
j = [0,1,3,5,6]
# 1인 경우
j>=i => 1,3,4,6 => count =4 1회 이상 인용된 논문의 수 4개
i>=count 등호가 들어가있기 때문에 우선 자기 자신부터 인용된 논문의 수와 같아야 한다.
# 3인경우
j>=i => 3,4,6 => count =3 1회 이상 인용된 논문의 수 3개
i>=count 등호가 들어가 있기 때문에 우선 자기 자신부터 인용된 논문의 수와 같아야 한다. => 그런데 같다. 그럼 후보에 올릴 수 있다.
마지막은 후보들 중에서 최댓값 h를 찾아주면 된다.
def solution(citations):
new_cit = []
for i in citations:
if i == 0:
pass
else:
count = 0
for j in citations:
if j>=i:
count+=1
if i>=count:
new_cit.append([i,count])
new_cit.sort(key = lambda x:x[1],reverse=True)
if new_cit:
return new_cit[0][1]
else:
return 0
회고
솔직히 문제 자체가 이해가 잘 안 되는 감이 좀 있었던 문제이다..
내일 학습할 것.
SQL, Python, 독서
'코딩테스트 > 알고리즘' 카테고리의 다른 글
99클럽 코테 스터디 14일차 TIL (숫자 카드2) (0) | 2024.08.04 |
---|---|
99클럽 코테 스터디 13일차 TIL (숫자 카드) (0) | 2024.08.03 |
99클럽 코테 스터디 11일차 TIL (카드뭉치) (0) | 2024.08.01 |
99클럽 코테 스터디 10일차 TIL (이중우선순위큐) (0) | 2024.07.31 |
99클럽 코테 스터디 9일차 TIL (더 맵게) (0) | 2024.07.30 |