728x90
https://school.programmers.co.kr/learn/courses/30/lessons/135808
풀이
score = 사과 수
즉, 이 사과 들 중에 m개 씩 빼와서 상자를 만들어야 한다
그러면 score.count / m 만큼 상자를 만들 수 있는데 최대 이익을 내야 하므로
score를 오름차순 정렬한 배열에서 최대 이익을 만들 수 있는 score.count % m 인덱스 값부터 상자를 만들어 내면 된다.
이 상자들 각자 최저 사과 점수) x (한 상자에 담긴 사과 개수) 를 구해서 값들을 합해주면 된다.
예제1번을 보면
m = 4
score = [1,2,3,1,2,3,1]
오름차순 정렬 하면 [1,1,1,2,2,3,3]이 되고
score.count & m = 3번 인덱스 부터 추출을 해주면 된다 그럼 만들어지는 상자는 총(score.count / m)개인 1개를 만들 수 있고
[2,2,3,3]의 최소값인 2 * m = 8
func solution(_ k:Int, _ m:Int, _ score:[Int]) -> Int {
var scores = score.sorted()
var result = 0
var boxCount = score.count / m
var leftApple = score.count % m
for i in 0 ..< boxCount {
let range = leftApple+(m-1)
let box = scores[leftApple ... range]
result += (box.min()! * m)
leftApple = range + 1
}
return result
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 기사단원의 무기 (0) | 2023.10.04 |
---|---|
프로그래머스: 2018 카카오 블라인드 채용 - [1차] 캐시 (0) | 2023.07.21 |
프로그래머스: 귤 고르기 (0) | 2023.07.16 |
프로그래머스: 멀리뛰기 (0) | 2023.07.12 |
프로그래머스: Summer/Winter Coding(~2018) - 점프와 순간이동 (0) | 2023.07.11 |
댓글