BOJ: #14889 - ์คํํธ์ ๋งํฌ
์ ํํ ํ ์๊ฐ ๊ฑธ๋ ค์ ํ์๋ค. ์ ๋ต ์ฝ๋ ํ๋จ์ ์๊ฐ ์ด๊ณผ, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ์ฝ๋๋ ๊ฐ์ด ์ฒจ๋ถํ๋ค.
- ์ผ๋จ, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ์ ๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ฅํด์ ์๊ธฐ๋ ๋ฌธ์ ์๋ค. ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ ํ์, ๊ตณ์ด ์ ์ฅํ ํ์๊ฐ ์๋ค๋ ๊ฑธ ๊นจ๋ฌ์์ ์ ์ฅํ์ง ์๊ณ , ๋ฐ๋ก ์ ์ ๊ณ์ฐํ๋ ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ๋ณ๊ฒฝํ๋ฉด์, ์ง๋ฌธ ๊ฒ์ํ์ ๋ณด๋ ์ ์ฒด ํ์ ์งํฉ์ผ๋ก ๋ง๋ค์ด ๋๊ณ ,
n / 2
์ ์กฐํฉ์ ๊ตฌํ ํ์, ์ฐจ์งํฉ์ ๊ตฌํ๋ ์์ผ๋ก ๋งํฌ ํ์ ๊ตฌํ๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ์์ด์ ๊ทธ๊ฒ๋ ๋ฐ์ํ๋ค. ์ฌ๊ธฐ๊น์ง๊ฐ ์๊ฐ ์ด๊ณผ ๋ ์ฝ๋์๋ค. - ๋๋ฌด์ง ํด๊ฒฐ์ฑ ์ ๋ชจ๋ฅด๊ฒ ์ด์, PyPy3๋ก๋ ์คํํด๋ดค๋๋ฐ ์ญ์๋ ์๊ฐ์ด๊ณผ์๋ค. ๋ค๋ฅธ ๊ธ์ ์ฐพ์๋ณด๋ ๋๊ฒ, ์๊ฐ ์ด๊ณผ ๋ ์ฝ๋๋ค์ ์กฐํฉ ๊ตฌํ๋ ํจ์๊ฐ ๋นํจ์จ์ ์ด๋ผ๋ ๋ต๋ณ์ ๋ดค๋ค. ๊ทธ๋์ ์ธ์ ๊ฐ ์ ์ฅํด๋จ๋, ๋ค๋ฅธ ๋ถ์ ์กฐํฉ ์ฝ๋๋ฅผ ์กฐ๊ธ ์์ ํด์ ์คํํ๋๋ ํต๊ณผํ๋ค. ํ๋ง๋๋ก ๋ด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ฝ๋๊ฐ ๋๋ฆฌ๋ค๋ ๊ฒ... ์ผ์์์!
- ์๋ฌดํผ ๊ฒฐ๊ตญ ํ์๊ณ ... ์์ผ๋ก๋ ์ด๋ฒ์ ์ฌ์ฉํ ์กฐํฉ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ๋ก... ํผ์ ํฉ์ ๋ดค๋ค. ์ด๊ฒ๋ ์ธ์ธ ์ ์์ ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ์ฐ์ตํด์ ์์ฑํด๋ด์ผ์ง.
๋ฌธ์
https://www.acmicpc.net/problem/14889
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift: ์ ๋ต
let n = Int(readLine()!)!
let m = Int(n/2)
var score = [[Int]]()
var totalTeam = Set(Array(0..<n))
for _ in 0..<n {
let line = readLine()!.split(separator: " ").map { Int(String($0))! }
score.append(line)
}
var answer = 987654321
func cal(startTeam: [Int], linkTeam: [Int]) {
var startTeamSum = 0
var linkTeamSum = 0
for i in 0..<m {
for j in i+1..<m {
startTeamSum += score[startTeam[i]][startTeam[j]] + score[startTeam[j]][startTeam[i]]
linkTeamSum += score[linkTeam[i]][linkTeam[j]] + score[linkTeam[j]][linkTeam[i]]
}
}
answer = min(answer, abs(startTeamSum - linkTeamSum))
}
func combination(of total: [Int], selectedCount: Int, current idx: Int, seletcted: [Int]) {
if selectedCount == 0 {
cal(startTeam: seletcted, linkTeam: Array(totalTeam.subtracting(Set(seletcted))))
} else if idx == total.count {
return
} else {
let new = seletcted + [total[idx]]
combination(of: total, selectedCount: selectedCount-1, current: idx+1, seletcted: new)
combination(of: total, selectedCount: selectedCount, current: idx+1, seletcted: seletcted)
}
}
combination(of: Array(0..<n), selectedCount: m, current: 0, seletcted: [])
print(answer)
Swift: ์๊ฐ ์ด๊ณผ
let n = Int(readLine()!)!
let m = Int(n/2)
var score = [[Int]]()
var totalTeam = Set(Array(0..<n))
for _ in 0..<n {
let line = readLine()!.split(separator: " ").map { Int(String($0))! }
score.append(line)
}
var answer = 987654321
func cal(startTeam: [Int], linkTeam: [Int]) {
var startTeamSum = 0
var linkTeamSum = 0
for i in 0..<m {
for j in i+1..<m {
startTeamSum += score[startTeam[i]][startTeam[j]] + score[startTeam[j]][startTeam[i]]
linkTeamSum += score[linkTeam[i]][linkTeam[j]] + score[linkTeam[j]][linkTeam[i]]
}
}
answer = min(answer, abs(startTeamSum - linkTeamSum))
}
var picked = [Int]()
var visited = Array(repeating: false, count: n)
func pick(toPick: Int) {
if toPick == 0 {
cal(startTeam: picked, linkTeam: totalTeam.subtracting(Set(picked)).sorted())
return
}
for i in 0..<n {
if visited[i] {
continue
}
visited[i] = true
picked.append(i)
pick(toPick: toPick - 1)
picked.removeLast()
visited[i] = false
}
}
pick(toPick: m)
print(answer)
Swift: ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
let n = Int(readLine()!)!
var score = [[Int]]()
for _ in 0..<n {
let line = readLine()!.split(separator: " ").map { Int(String($0))! }
score.append(line)
}
var teams = [[Int]]()
var picked = [Int]()
var visited = Array(repeating: false, count: n)
func pick() {
if picked.count == n {
teams.append(picked)
return
}
for i in 0..<n {
if visited[i] {
continue
}
visited[i] = true
picked.append(i)
pick()
picked.removeLast()
visited[i] = false
}
}
pick()
var answer = 987654321
for team in teams {
var startTeam = 0
for i in 0..<n/2 {
for j in i+1..<n/2 {
startTeam += score[team[i]][team[j]]
startTeam += score[team[j]][team[i]]
}
}
var linkTeam = 0
for i in n/2..<n {
for j in i+1..<n {
linkTeam += score[team[i]][team[j]]
linkTeam += score[team[j]][team[i]]
}
}
answer = min(answer, abs(startTeam - linkTeam))
}
print(answer)
๋ฐ์ํ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote