TIL/kotlin 알고리즘

kotlin 프로그래머스 lv2 H-Index

crablo 2024. 3. 7. 21:59
728x90

해당 문제를보고서 문제자체가 이해가 가질않아서 H-Index에 대해 찾아보았다.

즉, 피인용수 리스트 citations 를 내림차순으로 정렬한 후, 인덱스의 1더한 값과 리스트 요소를 비교해서

작아지기 인덱스값보다 인용수가 작아지기 직전의 시점에서의 위치가 H-지수가 된다는 것이다.

그래서 나는 코드를 아래와 같이 작성하였다.

테스트는 통과됐지만, 제출 시 통과되지 않아서 다른 사람의 풀이를 보았다.

그 중 아래 코드가 정말 간결했다.

fun solution(citations: IntArray): Int =
        citations.sortedDescending().filterIndexed { index, i -> (index + 1) <= i }.lastIndex + 1

문제를 푼사람은 나와달리 인덱스중 가장 마지막 인덱스를 선택 후 1을 더해서 문제의 의도대로 풀었다.

 

 

참고 블로그

https://deep-dive-dev.tistory.com/70

 

[Kotlin] 프로그래머스 > 코딩테스트 연습 > 정렬 > H-index

문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과

deep-dive-dev.tistory.com

  • 1.의도 및 이유: H-Index를 찾는것이 목표고 찾는 방법은 논문 횟수를 담은 citations 리스트를 내림차순으로 정렬후 각 요소의 인용 수를 정렬된 목록에서의 위치(인덱스+1)와 비교함. 
  • 2.코드 동작 로직:  내림차순으로 citations배열을 정렬하고 H-Index를 찾기위해 forEachIndexed함수를 사용하여 반복하면서 각 논문의 인용 수 value와 논문의 위치인 인덱스 idx를 비교한다. 이때, answer변수를 현재 인덱스의idx-1로 업데이트했다.
  • 버그 또는 에러 및 해결: 문제에서 인덱스중 가장 마지막 인덱스를 선택하는 사항이 있었고 이부분을 캐치하지 못하여  제출을 통과하지 못했고, 다른사람의 코드를 참조하여 캐치하지 못한부분을 반영하여 제대로된 결과를 확인할 수 있었다.
728x90