[프로그래머스] 정렬 - K번째수, H-Index
👨🏻‍💻iOS 공부/Swift_알고리즘 풀이

[프로그래머스] 정렬 - K번째수, H-Index

728x90
반응형

[1번 - K번째 수]

배열을 정렬한 후, 원하는 index의 값을 찾아내는 과정이다.

import Foundation

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var res: [Int] = []
    for com in commands {
        var newArray = array[com[0]-1...com[1]-1].sorted()    
        res.append(newArray[com[2]-1])
    }
    return res
}

 

[프로세스]

1. 배열을 자른다.

2. 배열을 정렬한다.

  • .sorted를 사용한다. by : 파라미터의 default 값이 < 이기에 오름차순으로 정렬된다.

3. 배열을 인덱싱한다.

 

 

크게 어려움 없이 풀이 완료!

 

 

[2번 - H-Index]

교수들을 논문 기반으로 평가하기 위한 지표.
H-Index에 대해서는 아래에 자세히 설명되어 있으니 참고하자.

 

H-Index 설명


출처 : www.ibric.org/myboard/read.php?Board=news&id=270333

 

import Foundation

func solution(_ citations:[Int]) -> Int {
    var res: Int = 0
    if citations.count > 1 {
        var sortedCitations = citations.sorted() {$0 > $1}
        for (i,cit) in sortedCitations.enumerated() {
            if i >= cit {
                res = i
                break
            } else {
                res = citations.count
            }
        }
    } else if citations.count == 1{
        res = 1
    } 

    return res
}

 

[프로세스]

1. 배열의 길이를 살펴본다. (조건 : 최소 1 이상)

    1-1. 배열의 길이가 1보다 크다면 2번으로 
    1-2. 배열의 길이가 1이라면 1을 결과값으로 가진다

 

2. 배열을 내림차순으로 정렬한다.

    .sorted에 후행 클로져({$0 > $1})를 사용하여 내림차순으로 정렬한다.

 

3. 배열을 .enumerated하여 (index, value) 쌍으로 값을 갖도록 한다.

 

4. 논문수(index), 인용수(value)를 비교한다.

    4-1. 논문수 >= 인용수 조건에 맞을 때, 그 때의 index 값이 H-Index이다. 이 때 `break`를 걸어 조건문을 나온다.
    4-2. 논문수 < 인용수일 때, H-Index는 논문수(n)이다. 

 

[추가정보]

  • .sorted() : 원본 배열을 바꾸지 않고 새로 반환값을 내뱉는다. by : 파라미터를 통해 정렬 방식 선택 가능 (클로저 사용도 물론 가능)

  • .sort() : 원본 배열을 정렬해버린다. 그렇기에 원본을 건드리면 안될 때 사용하면 안된다. 똑같이 by : 파라미터 사용

  • .enumerated() : 값에 대해 (index, value) 쌍으로 내뱉어준다.

728x90
반응형