728x90
[Swift] 프로그래머스 H-Index(lv. 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42747
2. 접근
논문이 인용된 횟수가 주어지는데, 이것을 가지고 'N번 인용된 논문의 개수'를 세고, N회 이상 인용된 논문의 수를 세야 한다.
그렇다면 계수를 활용해서 정렬을 하는 '계수정렬'을 사용하면 될 것이다.
0번 인용된 논문의 수 / 1번 인용된 논문의 수 / 2번 인용된 논문의 수 / 3번 인용된 논문의 수 / .....
이렇게 배열이 주어지는 것이다. 배열 안의 인덱스를 활용하면 N번 인용된 논문의 수를 셀 수 있다.
아래 코드의 array는 citations의 최대값(예시에서는 6)만큼 크기를 가지는 array를 만들었다.
그런 다음, i를 활용해서 array[i]에 +1을 해주는 방식으로 논문의 수를 count 해준다.
그런 다음, h의 최대값을 찾아준다.
array를 0부터가 아니라 끝부터 내려오면서 반복하는데,
tempSum은 논문의 개수를 누적하여 더하는 변수이다. 그렇다면, i는 array.count - 1부터 내려오면서 0까지 가는데, 논문의 개수 합이 i보다 더 커지는 때가 올 것이다. 이것이 h번 이상 인용된 논문이 h편 이상인 때를 알려준다고 할 수 있다. 그 때 i를 리턴해주면 되는 것이다.
정렬 후 최대값을 찾아주는 정렬 문제였다.
3. 코드
import Foundation
func solution(_ citations:[Int]) -> Int {
// 계수 정렬
var array = [Int](repeating: 0, count: citations.max()! + 1)
for i in citations {
array[i] += 1
}
var tempSum = 0
for i in stride(from: array.count - 1, to: 0, by: -1) {
tempSum += array[i]
if tempSum >= i {
return i
}
}
return 0
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 괄호 회전하기(lv. 2) (0) | 2023.03.20 |
---|---|
[Swift] 프로그래머스 [1차] 캐시(lv. 2) (0) | 2023.03.17 |
[Swift] 프로그래머스 멀리 뛰기(lv. 2) (1) | 2023.03.15 |
[Swift] 프로그래머스 점프와 순간이동(lv. 2) (0) | 2023.03.14 |
[Swift] 프로그래머스 예상 대진표(lv. 2) (0) | 2023.03.13 |
댓글