Archive/Questions

[programmers/Swift] 과일 장수

Marco 2022. 11. 14. 17:11
728x90

programmers.co.kr - 코딩테스트연습 - Lv.1 - 연습문제 - 과일 장수

 

프로그래머스

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

programmers.co.kr

Constraints :

  • 3 ≤ k ≤ 9
  • 3 ≤ m ≤ 10
  • 7 ≤ score의 길이 ≤ 1,000,000
    • 1 ≤ score[i] ≤ k
  • 이익이 발생하지 않는 경우에는 0을 return 해주세요.

Solution.swift :

//
//  Created by Yongwoo Marco on 2022/11/12.
//  Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//

func solution(_ k:Int, _ m:Int, _ score:[Int]) -> Int {
	var result = 0, sorted = score.sorted(by: >)

	for K in stride(from: m - 1, to: sorted.count, by: m) {
		if sorted[K] <= k {
			result += sorted[K] * m
		}
	}
	
	return result
}

print(solution(3, 4, [1, 2, 3, 1, 2, 3, 1]))  // 8
print(solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2]	))  // 33

How I tried this :
어차피 최대 점수보다 큰 점수의 사과는 버려질 예정이라고 생각해서

점수가 높은 사과 순으로 정렬을 먼저 진행

정렬된 사과이기에 m번 째 사과가 항상 해당 박스의 점수가 되므로 `stride(from:to:by:)` 메서드를 이용해서

적용될 점수의 사과에 접근하는 형태로 진행 사과박스를 못채운다면 위 메서드에서 다음 주기 인덱스에 접근하지 않음.

 

문제에 관한 모든 저작권 : https://programmers.co.kr/

728x90
댓글수0