쥐수의 공부노트

백준 14889번 스타트와 링크 본문

swift 알고리즘/백트래킹

백준 14889번 스타트와 링크

쥐수 2023. 7. 25. 15:26
728x90

정답 :

let n = Int(readLine()!)!

var array = Array(repeating: false, count: 100000)
var team1 = 0
var team2 = 0
var score = Array(repeating: Array(repeating: 0, count: n), count: n)
var minValue = Int.max
for i in 0..<n {
    let input = readLine()!.split(separator: " ").map{Int($0)!}
    score[i] = input
}

func dfs(depth : Int, start : Int) {
    if depth == n/2 {
        team1 = 0
        team2 = 0
        for i in 0..<n {
            for j in 0..<n {
                if !array[i] && !array[j] {
                    team2 += score[i][j]
                }
                if array[i] && array[j] {
                    team1 += score[i][j]
                }
            }
        }
        minValue = min(minValue, abs(team1 - team2))
        return
    }
    for i in start..<n {
        if !array[i] {
            array[i] = true
            dfs(depth: depth + 1, start: i)
            array[i] = false
        }
    }
}
dfs(depth: 0, start: 0)
print(minValue)

정답 :

false 배열을 이용하여 스타트팀이 들어간 자리를 true로 변경후 진입한다.

 

그러면 true가 아닌 부분에서 링크팀이 들어간 점수로 계산한다.

728x90

'swift 알고리즘 > 백트래킹' 카테고리의 다른 글

백준 14888번 연산자 끼워넣기  (0) 2023.07.25
백준 15652번 N과 M(4)  (0) 2023.07.18
백준 15651번 N과 M (3)  (0) 2023.07.14
백준 15650번 N과 M(2)  (0) 2023.07.12
백준 15649번 N과 M (1)  (0) 2023.07.12