TIL/알고리즘 공부

프로그래머스 Lv. 2 Swift 알고리즘 - H-Index

여의도사노비 2023. 1. 4. 17:05
728x90

지금까지 풀었던 프로그래머스 Lv2 문제중에 가장 짧으면서도 가장 이해안간 문제...

솔직히 아직도 100프로 이해는 안가는 문맥이 있지만... 간단하게 따져보면 이렇다.

 

"citations 논문 중 h번 이상 인용된 논문이 h편 이상일 때 최대의 h 값을 찾아라"

이 물음에 답을 할 수 있으면 정답을 구할 수 있다.

 

 

 

이 문제를 풀면서 생각한 논리적 흐름

  1. 가장 큰 값부터 차례대로 비교할 수 있도록 citation을 내림차순으로 정렬해준다.
  2. 우선 논문의 개수가 정해져 있고, h번 이상 인용된 논문이 h편 이상이어야 하기 때문에 count 값은 결국 논문 개수까지다.
  3. citation의 큰 값부터 차례대로 논문편수(i)와 비교를 해본다.
  4. 결국 i 보다 작은 논문편수가 발생하게 되고 거기서 멈춘다.
  5. 그럼 그게 답이다... h편 이하의 논문... 이 조건은 사실 뒤에서 만족하는지 안한느지도 잘 모르겠다.
  6. 그리고 아까 말했듯이 결국 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)

  1. 없음