안녕하세요. 이번에는 프로그래머스 H-Index 문제를 풀어보려고 합니다.
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/42747
Solution
class Solution {
fun solution(citations: IntArray): Int {
val sortedCitations = citations.sorted()
var max = 0
for(i in sortedCitations.size - 1 downTo 0) {
val min = Math.min(sortedCitations[i], sortedCitations.size - i)
max = Math.max(min, max)
}
return max
}
}
이번 문제는 n 편 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 과학자의 H-Index라고 합니다. 그래서 먼저 h번 이상 인용된 논문을 구해야 하기 때문에 sorted 기능을 통해서 정렬을 해줬습니다.
이렇게 정렬을 하게되면 [0, 1, 3 ,5 ,6]이 됩니다. 여기서 각 값과 그 값 이상이 등장하는 횟수를 표시하면 다음과 같습니다.
- 6 : 1번
- 5 : 2번
- 3 : 3번
- 1 : 4번
- 0 : 5번
이때, H-Index는 3이 됩니다. 왜냐하면 3번 이상 등장하는 값이 3개 있고, 그중 최댓값이 3이기 때문입니다.
이것을 코드로 만들게되면, Math.min()을 통해서 인용된 횟수와 인용된 논문의 편수 중 낮은 값을 구합니다
그리고 그 Math.max()를 사용하여 min 값 중 최댓값을 구해주면 H-index의 값을 구할 수 있습니다.
1. 다른 사람 코드
import kotlin.math.min
class Solution {
fun solution(citations: IntArray) =
citations.sortedDescending().mapIndexed {
idx, item ->
min(idx + 1, item)
}.maxOf { it }
}
저와 비슷한 방법으로 문제를 풀었지만 mapIndexed를 사용해서 좀 더 코드에 가독성이 좋아 보여서 가져왔습니다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 과일장수 풀이 Kotlin (0) | 2024.01.16 |
---|---|
[프로그래머스] 2016년 Kotlin (0) | 2024.01.14 |
[프로그래머스] n^2 배열 자르기 Kotlin (0) | 2024.01.10 |
[프로그래머스] 할인 행사 Kotlin (0) | 2024.01.04 |
[프로그래머스] 괄호 회전하기 Kotlin (0) | 2024.01.03 |