본문 바로가기
알고리즘/프로그래머스

프로그래머스: 과일 장수

by 패쓰킴 2023. 7. 20.
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

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

댓글