본문 바로가기
Problem Solving

[Swift] 프로그래머스 과일 장수(lv. 1)

by DuncanKim 2023. 2. 18.
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

댓글