2022. 11. 3. 16:01ใAlgorithm
๋ฐฑ์ค - ๊ณตํญ(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/10775
๋์ ํ์ด
์๋นํ ์ด๋ ค์ ๋ ๋ฌธ์ ๋ค.
์ฒ์ ์ ๊ทผ์ ๋นํ๊ธฐ๊ฐ ๋ํนํ ์ ์๋ ๊ฒ์ดํธ๊ฐ ์ฃผ์ด์ก์๋ ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ๋ฐฐ์นํ๋ฉด ๋๋ค๋ผ๋ ์์ด๋์ด์๋ค.
ํ์ง๋ง ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด ์ ๋งคํ๋ค. ์๋ฅผ๋ค์ด 1~6๊น์ง์ ๊ฒ์ดํธ๊ฐ ์๊ณ 3๊ฐ์ ๋นํ๊ธฐ๊ฐ ๊ฐ์์๋ ๊ฒ์ดํธ๊ฐ 6 6 6์ผ๋ก ์ฃผ์ด์ก๋ค๋ฉด
์ฒ์ 6์ ๋ํ ๋ถ๋ถ์ false๋กํด์ ๋ง๋ค ์ ์์ง๋ง 6์ด ์๋๋ 6-1 ์ ํ 5๋ก ๋ฃ๊ณ , ๋ 5๊ฐ false์ผ๋ 5-1์ ๋ฃ์ด์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ด๋ ๋ง์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ด๋๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ์ฌ๊ท๋ฅผ ์ต์ํ์ผ๋ก ์ค์ด๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
์ฒซ๋ฒ์งธ ํต์ฌ์ ๋์ผํ๋ค.
์ฃผ์ด์ง ๊ฒ์ดํธ ์ค์์ ๊ฐ์ฅ ํฐ ๊ฒ์ดํธ๋ฅผ ๋ฐฐ์นํ์.
๋จผ์ parents๋ผ๋ ๋ฐฐ์ด์ ๊ฐ๊ฐ 0~Gate์ ๊ฐ์๊น์ง ์ด๊ธฐํ๋ฅผ ํ ๋ค ๋ํน์ด ๊ฐ๋ฅ ํ ๊ฒฝ์ฐ๋ฅผ 0๋ฒ ๊ฒ์ดํธ๊น์ง ๊ฐ์ง์์ ๊ฒฝ์ฐ๋ก ๋๊ณ ๋ํน์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ 0๋ฒ ๊ฒ์ดํธ์ ๋๋ฌํ ๊ฒฝ์ฐ๋ก ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ํ ๋ฒ ๋ํน์ํ๋ค๋ฉด parents[node]๊ฐ์ 1๊ฐ์ํจ์ผ๋ก์จ ํด๋น ๋ฒํธ๊ฒ์ดํธ์์๋ ๋ํน์ด ๋ถ๊ฐํ ํํ๋ก ๋์๋ค.(ํด๋น ๊ฒ์ดํธ๊ฐ ๋ํน์ด ๋ถ๊ฐํ ๊ฒ์ด์ง ๊ทธ์ ๊ฒ์ดํธ๋ ๋ํน์ด ๊ฐ๋ฅํ ์ํ)
์ ๋ฆฌํ์๋ฉด
๊ฐ ๋นํ๊ธฐ์ ๊ฒ์ดํธ๋ฒํธ์ ๋ํด์ root๊ฐ์ ๊ตฌํ๋ ๋ฐ root๊ฐ์ด 0์ด๋ผ๋ฉด ๋นํ๊ธฐ๋ฅผ ๋ํนํ ์ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋์ธ ๊ฒ์ด๋ค.
import Foundation
let G = Int(readLine()!)!
let P = Int(readLine()!)!
var parents = [Int]()
var gates = [Int]()
var total = 0
for i in 0..<G+1 {
parents.append(i)
}
for _ in 0..<P {
let gate = Int(readLine()!)!
gates.append(gate)
}
for gate in gates {
let root = find(gate)
if root == 0 { // ๋ํนํ ๊ฒ์ดํธ๊ฐ ์กด์ฌํ์ง ์์๊ฒฝ์ฐ
break
}
parents[root] -= 1 // ๋ํนํ ๊ณณ์ -1์ ํด์ ๋์ค์ ๋ค์ ๊ฒ์ดํธ์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ํ ์นธ์์ผ๋ก ์ด๋ํ๊ฒ ๋ ํ๋ค.
total += 1
}
print(total)
func find(_ node: Int) -> Int {
if node == parents[node] { // ๋ํน์ด ์์ง ์๋์ด์๋ค๋ฉด
return node
} else {
parents[node] = find(parents[node]) // ํ ๋ฒ ๊น๊ฒ ํ์ํ ๊ฐ์ ์ค์ ํจ์ผ๋ก์จ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์.
return parents[node]
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ์ปตํ๋(Swift) (0) | 2022.11.04 |
---|---|
๋ฐฑ์ค - ์ผ์(Swift) (0) | 2022.11.04 |
๋ฐฑ์ค - ํฌ๊ฒ ๋ง๋ค๊ธฐ(Swift) (0) | 2022.11.03 |
๋ฐฑ์ค - ๋นต์ง(Swift) (0) | 2022.11.01 |
๊ฒ์์ ๋ง๋ ๋์ค์ด (0) | 2022.10.31 |