Problem Solving
[Swift] 프로그래머스 과일 장수(lv. 1)
DuncanKim
2023. 2. 18. 09:31
728x90
[Swift] 프로그래머스 과일 장수(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 접근
처음 문제를 봤을 때 단순히 내림차순으로 하여 m개 만큼 쌍을 지어 묶으면 된다고 생각했다. 어느 쌍에서 [가장 작은 수 * m] 한 것을 누적합하면 result를 얻을 수 있을 것이라 생각했다.
아래 코드에는 sortedScore에 내림차순된 score가 들어가 있다. 그리고 순회를 돌면서 tempArray에 sortedScore[i] 를 계속 집어 넣는다. 그런 다음, m * i 번 째 숫자가 들어갈 때, tempArray에는 m개 만큼 원소가 들어가 있고, 그 중 가장 작은 수 * m을 하여 answer에 누적하여 합을 한다. 그 다음 tempArray는 초기화 시켜준다.
정렬 -> 부분 나누기 -> 누적합의 과정으로 답을 충분히 얻을 수 있었다.
3. 코드
import Foundation
func solution(_ k:Int, _ m:Int, _ score:[Int]) -> Int {
let sortedScore = score.sorted(by: >)
var answer = 0
var tempArray = [Int]()
for i in 0 ... sortedScore.count - 1 {
tempArray.append(sortedScore[i])
if i % m == m - 1 {
answer += tempArray.min()! * m
tempArray = [Int]()
}
}
return answer
}
728x90