728x90
https://www.acmicpc.net/problem/18429
18429번: 근손실
웨이트 트레이닝을 좋아하는 어떤 대학원생은, 현재 3대 운동 중량 500의 괴력을 소유하고 있다. 다만, 하루가 지날 때마다 중량이 K만큼 감소한다. 예를 들어 K=4일 때, 3일이 지나면 중량이 488로
www.acmicpc.net
백트래킹은 DFS와 달리 불필요한 탐색은 하지 않는다.
그래서 앞의 키트에서 중량 500을 넘기지 못하면 뒷부분 키트도 사용해보지 않고 패스하도록 했다.
(cnt == n 조건까지 들어가지 않고 패스하기)
500을 넘는 애들만 재귀호출 진행.
import Foundation
//input
let nk = readLine()!.split(separator: " ").map{ Int(String($0))! }
let (n, k) = (nk[0], nk[1])
var check = [Bool](repeating: false, count: 9)
var arr = readLine()!.split(separator: " ").map{ Int(String($0))! }
var answer = 0
func bt(_ cnt: Int, _ weight: Int) {
if cnt == n {
answer += 1
return
}
for i in 0..<n {
if !check[i] {
if weight - k + arr[i] < 500 { continue }
check[i] = true
bt(cnt+1, weight - k + arr[i])
check[i] = false
}
}
}
bt(0, 500)
print(answer)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Swift] 11052번: 카드 구매하기 (0) | 2023.02.09 |
---|---|
[백준/Swift] 16928번: 뱀과 사다리 게임 (0) | 2023.02.09 |
[백준/Swift] 16922번: 로마 숫자 만들기 (0) | 2023.02.06 |
[백준/Swift] 2961번: 도영이가 만든 맛있는 음식 (0) | 2023.02.06 |
[백준/Swift] 16472번: 고냥이 (0) | 2023.02.02 |