TIL/알고리즘 공부
프로그래머스 Lv. 2 Swift 알고리즘 - H-Index
여의도사노비
2023. 1. 4. 17:05
728x90
지금까지 풀었던 프로그래머스 Lv2 문제중에 가장 짧으면서도 가장 이해안간 문제...
솔직히 아직도 100프로 이해는 안가는 문맥이 있지만... 간단하게 따져보면 이렇다.
"citations 논문 중 h번 이상 인용된 논문이 h편 이상일 때 최대의 h 값을 찾아라"
이 물음에 답을 할 수 있으면 정답을 구할 수 있다.
이 문제를 풀면서 생각한 논리적 흐름
- 가장 큰 값부터 차례대로 비교할 수 있도록 citation을 내림차순으로 정렬해준다.
- 우선 논문의 개수가 정해져 있고, h번 이상 인용된 논문이 h편 이상이어야 하기 때문에 count 값은 결국 논문 개수까지다.
- citation의 큰 값부터 차례대로 논문편수(i)와 비교를 해본다.
- 결국 i 보다 작은 논문편수가 발생하게 되고 거기서 멈춘다.
- 그럼 그게 답이다... h편 이하의 논문... 이 조건은 사실 뒤에서 만족하는지 안한느지도 잘 모르겠다.
- 그리고 아까 말했듯이 결국 h의 값은 citation 원소의 값을 따르는데... citation 내부의 값이 h 보다 크기만 할 경우 예외사항으로 처리해주어야 한다. (예를들면 111, 222, 333, 444, 555)
* 코드
private func solution(_ citations:[Int]) -> Int {
let citations = citations.sorted(by: >)
var result = -1
for i in 0...citations.count-1 {
let value = citations[i]
let h = i+1
if h > value {
result = i
break
}
}
if result == -1 {
return citations.count
}
return result
정리(Today I Learned)
- 없음