티스토리 뷰
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150368
풀이
효율적으로 계산하는 방법이 있는지 고민을 했었다. 근데 emoticons의 길이가 최대 7이라는 점에서 완전탐색을 이용해도 되겠다는 생각을 했다. 할인율은 총 네 가지 경우만 존재하므로 최대 유저가 100명이어도 해볼만하다고 생각했다.
그래서 재귀를 이용해 우선 모든 할인율 케이스를 미리 구해주었다. 그리고 매 경우별로 직접 계산해서 결과를 출력하였다.
import Foundation
func solution(_ users:[[Int]], _ emoticons:[Int]) -> [Int] {
var result = [0,0]
var list: [[Int]] = []
let discount = [10,20,30,40]
func permu(_ arr: [Int]) {
if arr.count == emoticons.count {
list.append(arr)
return
}
for i in 0..<4 {
permu(arr + [discount[i]])
}
}
permu([])
for disCase in list {
var plusUser = 0
var total = 0
for i in 0..<users.count {
let minDis = users[i][0]
let minTotal = users[i][1]
var tempTotal = 0
for j in 0..<disCase.count {
if disCase[j] < minDis {
continue
}
tempTotal += emoticons[j] * (100 - disCase[j]) / 100
}
if tempTotal >= minTotal {
plusUser += 1
} else {
total += tempTotal
}
}
if result[0] < plusUser || (result[0] == plusUser && result[1] < total) {
result = [plusUser,total]
}
}
return result
}
_____________________________________________________________________________________________________
나름대로 주어진 최대 케이스의 규모가 작은지 큰지 판단을 해보는데, 기준을 어떻게 세워야할지 아직 잘 모르겠음.
'PS' 카테고리의 다른 글
[Swift] 프로그래머스_두 큐 합 같게 만들기 (0) | 2023.02.14 |
---|---|
[Swift] 프로그래머스_미로 탈출 명령어 (0) | 2023.02.13 |
[Swift] 프로그래머스_택배 배달과 수거하기 (0) | 2023.02.13 |
[Swift] 백준_이분 그래프(1707) (0) | 2023.02.08 |
[Swift] 백준_치즈(2638) (0) | 2023.02.06 |
댓글
최근에 올라온 글
- Total
- Today
- Yesterday