정렬을 이용해서 푸는 문제인데 처음에 질문을 이해 못해서 답을 맞추긴 했는데 다른분들의 코드보다 너무 복잡해졌다.
func solution(_ citations:[Int]) -> Int {
var result: Int = 0
let array = citations.sorted(by: > )
for i in (1 ... array.count).reversed() {
//h번 이상 인용
let up = array.filter {
$0 >= i
}.count
//h번 이하 인룔
let down = citations.filter {
$0 <= i
}.count
//인용된 논문 h번 이상, 인용되지 않은 논문 h번 이하 중 최대값
if up >= i && down <= i && result < i {
result = i
}
if i < up {
return result
}
}
return result
}
깔끔한 코드를 보고도 이해가 전혀 안되서 한참을 보았는데
처음 문제를 보고 n편의 논문 중 h편 이상 인용된 것, h편 이하 인용되 것 카운트를 해서 조건에 맞게 찾아야 한다고 생각했는데
배열을 역순으로 정렬하면 [6, 5, 3, 1, 0]이 나오는데 이렇게 정렬을 하면 자동으로 앞에서부터 1, 2, 3, 4번 이상 인용되는 배열이다
그렇게 되면
6번 이상 인용된것 1번
5번 이상 2번
3번 이상 3번
1번 이상 4번
이런식으로 정렬이 되고 그 때 index보다 인용된 수가 작아지는 부분 3 -> 1 이부분 이후로는 절대로 더 많이 인용된 h가 나올 수 없어 리턴해버리면 되는 문제였다.
func solution(_ citations:[Int]) -> Int {
for (index, cit) in citations.sorted(by: >).enumerated() {
if index >= cit {
return index
}
}
return citations.count
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 위장 (0) | 2020.12.26 |
---|---|
프로그래머스 - 카펫 (0) | 2020.12.24 |
프로그래머스 - 소수찾기 (0) | 2020.12.23 |
프로그래머스 - 모의고사 (0) | 2020.12.23 |
프로그래머스 - 가장 큰 수 (0) | 2020.12.23 |