프로그래밍/코딩테스트

그리디- 큰 수의 법칙 / Swift

turu 2021. 5. 13. 17:04

이것이 취업을 위한 코딩테스트다 p.92

 

방법1 : 반복문으로 구하기

import Foundation

let nmk = readLine()!.split(separator: " ").map { Int($0)! }
var list = readLine()!.split(separator: " ").map { Int($0)! }

let n = nmk[0], m = nmk[1], k = nmk[2]

var passed = 0
var sum = 0

list.sort(by: >)

while passed < m {
    passed += 1
    if passed % k == 0 {
        sum += list[1]
    } else {
        sum += list[0]
    }
}
print(sum)

 

방법2 : 수열의 규칙성을 이용하여 실제 갯수를 구해버리기

import Foundation

let nmk = readLine()!.split(separator: " ").map { Int($0)! }
var list = readLine()!.split(separator: " ").map { Int($0)! }

let n = nmk[0], m = nmk[1], k = nmk[2]

var passed = 0
var sum = 0

list.sort(by: >)

sum += (m / (k+1)) * (list[0] * k + list[1])
sum += (m % (k+1)) * list[0]

print(sum)
반응형