2023. 3. 13. 21:56ㆍ알고리즘/문제
H-Index
https://school.programmers.co.kr/learn/courses/30/lessons/42747
출처: 프로그래머스
(이 포스트는 광고 게시가 없는 비영리, 비상업적 포스트임을 알려드립니다.)
풀이
class Solution {
fun solution(citations: IntArray): Int {
var answer = 0
val list = mutableListOf<Int>()
for (i in citations.indices) {
if (citations.count { it >= i + 1 } >= i + 1) list.add(i + 1)
}
answer = if (list.isEmpty()) 0 else list.last()
return answer
}
}
두 번 풀면서 느낀 점은 문제를 한 번에 이해하지 못했다는 것입니다.
[ 1,3,9,7,2,8,5,6,4,0 ]
위와 같은 예시가 있습니다.
h번 이상 인용된 논문이 h 편 이상이다는 말은
1(h) 번 이상 인용된 논문 = 9편 >= 1(h) 편 이상
2(h) 번 이상 인용된 논문 = 8편 >= 2(h) 편 이상
3(h) 번 이상 인용된 논문 = 7편 >= 3(h) 편 이상
4(h) 번 이상 인용된 논문 = 6편 >= 4(h) 편 이상
5(h) 번 이상 인용된 논문 = 5편 >= 5(h) 편 이상
6(h) 번 이상 인용된 논문 = 4편 < 6(h) 편 미만
H-Index는 5입니다.
[ 9000,7000, 10000, 5000, 6000, 3000, 2000, 8000, 4000, 1000 ]
1번 이상 인용된 논문 = 10편 >= 1편 이상
2번 이상 인용된 논문 = 10편 >= 2편 이상
3번 이상 인용된 논문 = 10편 >= 3편 이상
4번 이상 인용된 논문 = 10편 >= 4편 이상
5번 이상 인용된 논문 = 10편 >= 5편 이상
6번 이상 인용된 논문 = 10편 >= 6편 이상
7번 이상 인용된 논문 = 10편 >= 7편 이상
8번 이상 인용된 논문 = 10편 >= 8편 이상
9번 이상 인용된 논문 = 10편 >= 9편 이상
10번 이상 인용된 논문 = 10편 >= 10편 이상
11번 이상 인용된 논문 = 10편 < 11편 미만
H-Index는 10입니다.
이해가 되시나요??
H-Index는 여러 개가 가능합니다. 1부터 다 1편 이상 2편 이상 만족하므로 전부 가능하다가
10편 일 때가 최대가 되기 때문에 10이 H-Index의 최댓값이 됩니다.
이제 다시 코드를 보겠습니다.
class Solution {
fun solution(citations: IntArray): Int {
var answer = 0
val list = mutableListOf<Int>()
for (i in citations.indices) {
if (citations.count { it >= i + 1 } >= i + 1) list.add(i + 1)
}
answer = if (list.isEmpty()) 0 else list.last()
return answer
}
}
for문의 반복은 0번부터 citations의 size-1까지입니다.
돌아봐야 size 개수만큼 돌면 됩니다.
그리고 if문에 count를 세어주는데
1번 이상 인용된 논문 = 10편 >= 1편 이상
2번 이상 인용된 논문 = 10편 >= 2편 이상
3번 이상 인용된 논문 = 10편 >= 3편 이상
4번 이상 인용된 논문 = 10편 >= 4편 이상
5번 이상 인용된 논문 = 10편 >= 5편 이상
6번 이상 인용된 논문 = 10편 >= 6편 이상
여기서 반복되는 게 보이시죠??
i+1번 이상 인용된 논문 = citation에서 i+1번 이상인 원소의 개수 >= i+1 이면 통과입니다.
그래서 if문 안에
citation에서 i+1번 이상인 원소의 개수 >= i+1
citations.count { it >= i+1 } >= i+1
이렇게 바뀌게 됩니다.
최적화는 몇 가지 있을 수 있습니다.
저는 따로 하지 않고 1번 이상 인용된 걸 만족하지 않는다면 0이므로 마지막 분기 처리 후 반환하였습니다.
이상입니다. 감사합니다~
'알고리즘 > 문제' 카테고리의 다른 글
프로그래머스 Level 2 혼자서 하는 틱택토 (0) | 2023.03.14 |
---|---|
프로그래머스 Level 2 괄호 회전하기 (0) | 2023.03.14 |
프로그래머스 Level 2 카펫 (0) | 2023.03.13 |
프로그래머스 알고리즘 Level 1 코틀린 소수 만들기 (0) | 2023.01.27 |
프로그래머스 알고리즘 Level 1 코틀린 푸드파이트 대회 (0) | 2023.01.27 |