-
프로그래머스_정렬_레벨2_H-Index코딩/코딩테스트 2021. 5. 14. 00:48
문제
문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항
과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
내 풀이
# 내 풀이, 최대시간: 0.18ms def solution(citations): sortList = sorted(citations, reverse=True) for h, v in enumerate(sortList): if v <= h: return h return len(sortList)
해결법
논문 인용 횟수가 담긴 citations 배열을 내림차순으로 정렬한 후, h값과 h + 1번째 논문의 인용횟수를 비교합니다.
sortList[h] 값이 h보다 작아지면 h번 이상 인용된 논문이 h + 1개 이하라는 의미이므로, 최대값은 h가 됩니다.
for 문을 빠져나오면 가장 인용이 조금 된 논문의 인용횟수도 전체 논문의 수보다 크다는 의미이므로, 전체 논문의 수를 그대로 return합니다.
문제점, 보완할 점
더 간결한 코드로 만들 수 있을 것 같습니다.
모범 풀이
# 모범 풀이, 최대시간: 0.32ms def solution(citations): citations.sort(reverse=True) answer = max(map(min, enumerate(citations, start=1))) return answer
해결법
enumerate (list, start= 1) = [(1, list[0]), (2, list[1]) ...]를 사용해서, 1부터 시작하는 index값과 list값 중 작은 값을 리스트에 넣었습니다.
넣은 값 중에 가장 큰 값, 즉 인덱스와 리스트 값이 교차하는 범위에서 가장 큰 값을 출력했습니다.
배울점
1부터 시작하는 값과 정렬된 citations의 값을 map함수로 합쳐서 간결한 코드를 만들었습니다.
map함수 안에 min조건을 줘서 더 간결한 코드를 작성했습니다.
map함수를 사용해서 코드를 간결하고 보기 좋게 만들 수 있다는 점을 배웠습니다.
반응형'코딩 > 코딩테스트' 카테고리의 다른 글
프로그래머스_완전탐색_레벨2_소수찾기 (0) 2021.05.14