728x90
[Swift] 프로그래머스 귤 고르기(lv. 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 접근
크기 - 개수 쌍을 다루어야 하기 때문에 딕셔너리가 떠올랐다. 딕셔너리로 각각의 크기 별로 몇 개가 있는지를 파악한 후에 크기가 다른 것이 최소화 될 수 있도록 개수가 많은 크기부터 채운다는 생각으로 로직을 짜면 될 것 같았다.
그래서 countDict를 하나 만들고 초기화를 시켜준 다음, tangerine 배열 안에 있는 숫자를 key로 하고 개수를 value로 하여 countDict를 완성시켰다. countDict 초기화시 tangerine의 최소값과 최대값까지만 초기화를 시켜주어 낭비되는 시간을 최소화하였다.
(그렇지만 지금 생각해보니 없으면 초기화를 시켜주고, 있으면 개수를 더해주는 방식으로 해도 충분할 것 같다.)
그런 다음 countDict를 value를 기준으로 해서 정렬을 시켜준 후, i의 value를 k에서 빼는 식으로 반복을 하다가, j가 0보다 작거나 같게 되면 상자가 모두 채워진 것이기 때문에 break로 빠져나와준다. answer는 반복을 한 번 할 때마다 1씩 증가시켜서 몇 종류의 과일이 담겼는지 세어준다.
마지막으로 answer를 리턴시켜주면 끝!
3. 코드
import Foundation
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var answer = 0
var countDict = [Int:Int]()
for i in tangerine.min()! ... tangerine.max()! {
countDict[i] = 0
}
for i in tangerine {
countDict[i]! += 1
}
var j = k
for i in countDict.sorted(by: {$0.value > $1.value}) {
j -= i.value
answer += 1
if j <= 0 {
break
}
}
return answer
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 타겟 넘버(lv. 2) (0) | 2023.04.01 |
---|---|
[Swift] 프로그래머스 k진수에서 소수 개수 구하기(lv. 2) (0) | 2023.03.31 |
[Swift] 프로그래머스 [1차] 뉴스 클러스터링(lv. 2) (0) | 2023.03.28 |
[Swift] 프로그래머스 프린터(lv. 2) (0) | 2023.03.27 |
[Swift] 프로그래머스 주차 요금 계산(lv. 2) (0) | 2023.03.25 |
댓글