ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - h-Index(Swift)

2022. 10. 11. 15:31ใ†ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Swift

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - h-Index(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

https://school.programmers.co.kr/learn/courses/30/lessons/42747

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

 ๋‚˜์˜ ํ’€์ด

 

0๋ถ€ํ„ฐ arr.count๊นŒ์ง€ h-index๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ filter๊ฐ’์œผ๋กœ maxIdx๋ฅผ ๊ณ„์† ๋ณ€ํ™”๋ฅผ ์‹œ์ผฐ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ’€์ด๋Š” ๋ฌธ์ œ ์กฐ๊ฑด์ด ์ปค์ง€๋ฉด ์‹คํŒจํ•˜๋Š” ํ’€์ด๊ธฐ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ข€ ๋” ํšจ์œจ์ ์ธ ๊ฒƒ์„ ์ฐพ์•˜๋‹ค.

 

import Foundation

func solution(_ citations:[Int]) -> Int {
    var arr = citations.sorted(by: <)
    var maxIdx = 0
    for x in Array(0...arr.count) {
        let upperIdx = arr.filter{ $0 >= x }.count
        let lowerIdx = arr.filter{ $0 < x }.count
        if upperIdx >= x && lowerIdx <= x {
            maxIdx = x
        }
    }
    return maxIdx
}

 

 

 

 ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

 

ํ’€์ด๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์ง€๋งŒ ํ•œ ๋ฒˆ ์ดํ•ดํ•˜๋ฉด ์ข‹์€ ํ’€์ด๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋จผ์ € ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์ธ [0, 1, 3, 5, 6]์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด๋ณด์ž. -> [6, 5, 3, 1, 0]

์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒƒ์ธ๋ฐ ์ด๋•Œ ์ธ๋ฑ์Šค๋Š” h-index์ด๋‹ค.

์ฒซ๋ฒˆ์งธ๋กœ h-index๊ฐ€ 1์ผ๋•Œ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด h-index๋ฅผ 1๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ œ๋Š” h๋ฒˆ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์˜ ์ˆ˜๊ฐ€ h๊ฐœ ์ด์ƒ์ด๊ณ , ๋‚˜๋จธ์ง€ ๋…ผ๋ฌธ์ด h๋ฒˆ ์ดํ•˜ ์ธ์šฉ์ด ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ์ธ 6์€ 1๋ฒˆ์ด์ƒ ์ธ์šฉ๋˜๋ฉด์„œ 1๊ฐœ์ด์ƒ์ด๊ณ  ๋‚˜๋จธ์ง€ ๋…ผ๋ฌธ๋“ค์€ 1๋ฒˆ ์ดํ•˜๋กœ ์ธ์šฉ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋‘๋ฒˆ์งธ๋ฅผ ๋ณด๋ฉด h-index๊ฐ€ 2์ผ๋•Œ ๋ฐฐ์—ด์˜ ์›์†Œ์ธ 5์™€ ๋น„๊ตํ•˜๊ฒŒ๋˜๊ณ  ์ด ๋˜ํ•œ 2๋ฒˆ์ด์ƒ ์ธ์šฉ๋œ ๊ฒƒ์ด 2๊ฐœ ์ด์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์—(์ฒ˜์Œ 6์ธ ์›์†Œ๊ฐ€ 1๊ฐœ ์ด๋ฒˆ์— ์ฒดํฌํ•œ ๊ฒƒ ํฌํ•จํ•ด์„œ 2๊ฐœ) h-index๊ฐ€ 2๊ฐ€ ๋œ๋‹ค. 

๋‚˜๋จธ์ง€ ๋…ผ๋ฌธ์ด h๋ฒˆ ์ดํ•˜ ์ธ์šฉ๋˜์—ˆ๋‹ค๋ฉด์˜ ์กฐ๊ฑด์€ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์€ ํ›„์— ๋‚˜๋จธ์ง€ ๋…ผ๋ฌธ๋“ค์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ h๋ฒˆ ์ดํ•˜์˜ ๋…ผ๋ฌธ๋“ค๋งŒ ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋ฐฐ์—ด์˜ ํ˜„์žฌ ๊ฐ’๊ณผ ์ฆ๊ฐ€ํ•˜๋Š” index๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ์ž‘์•„์ง€๋Š” ์‹œ์ ์ด h-index์˜ ์ตœ๋Œ€๊ฐ’์ด ๋œ๋‹ค.

 

import Foundation

func solution(_ citations:[Int]) -> Int {
    var citations = citations.sorted(by: >)
    var result = 0
    
    for i in 0..<citations.count {
        //์ด if๋ฌธ์ด ์ฐธ์ด๋ผ๋ฉด ํ˜„์žฌ h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์ด hํŽธ ์ด์ƒ์ธ ๊ฒƒ
        if i+1 <= citations[i] {
            result = i+1
        }else {
            break
        }    
    }
    return result
}

 

 ํ”ผ๋“œ๋ฐฑ

 

์ฆ๊ฐ€ํ•˜๋Š” ์ธ๋ฑ์Šค = ๋…ผ๋ฌธ์— ์ธ์šฉ๋œ ๊ฐœ์ˆ˜๋กœ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ