2022. 12. 3. 16:03ใAlgorithm
๋ฐฑ์ค - ์์ด ์ฌ์ดํด(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/10451
๋์ ํ์ด
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์๋๋ ์ 3 2 7 8 1 4 5 6์ ์์ด์ด ์ค๋ฅธ์ชฝ์ฒ๋ผ๋๋๊ฑด์ง ์ดํด๋ฅผ ํ์ง ๋ชปํ๋ค.
์ด๋ ๊ฒฐ๊ตญ 1๋ถํฐ์ ์ธ๋ฑ์ค์ ์ด ์ซ์๋ค๊ฐ์ ๊ฐ์ ์ด์์์ ๋ํ๋ด๋ ๊ฒ์์ ์์๊ณ ์ฌ์ดํด์ด ๋ช๊ฐ ์กด์ฌํ๋ฉด๋๋์ง๋ฅผ ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ฌ๊ท๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
ํ์ง๋ง ์ด๋ ํ ์ด์ ๋ก ์๊ฐ์ด๊ณผ๊ฐ ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์๋๋ฐ ์๋์ฝ๋๊ฐ ๋์ ์ฒ์ ์ฝ๋์ด๋ค.
import Foundation
let tc = Int(readLine()!)!
var visited = [Bool]()
var arr = [Int]()
var result = 0
func cycle(_ num: Int) {
visited[num] = true
if !visited[arr[num]] { cycle(arr[num]) }
}
for _ in 0..<tc {
let N = Int(readLine()!)!
arr = Array(repeating: 0, count: N+1)
visited = Array(repeating: false, count: N+1)
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
for i in 1..<N+1 {
arr[i] = input[i-1]
}
for i in 1..<N+1 {
if !visited[i] {
cycle(i)
result += 1
}
}
print(result)
result = 0
}
cycleํจ์์์ ํ์ฌ ํ์์ค์ธ ๊ฐ์ ๋ฐฉ๋ฌธํ์ํ๊ณ ๊ทธ ๊ฐ์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ด ๋ฐฉ๋ฌธ๋์ง์์๋ค๋ฉด ๋ค์ ์ฌ์ดํดํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ ์ด๋ ์๊ฐ์ด๊ณผ๋ฅผ ๋ด๊ธฐ์ ์ ํฉํ ์ฝ๋์๋ค.
์๋ฅผ๋ค์ด cycleํจ์๊ฐ ์ฐ์์ผ๋ก 500๋ฒ ํธ์ถ๋์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๊ทธ๋ ๋ค๋ฉด ์ฒซ๋ฒ์งธ๋ถํฐ 500๋ฒ์งธ๊น์ง ๋ฐฉ๋ฌธ๋์ง ์์ ๊ฐ๋ค์ด์๋ค๋ ๊ฒ์ธ๋ฐ ์ด๋ 501๋ฒ์งธ์ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ด์๋ค๋ฉด ๋ฐ๋ก ๋ชจ๋ ์ฌ์ดํด์ด ์ข ๋ฃ๊ฐ ๋๋๊ฒ์ด ์๋๋ผ 500, 499, 498๋ฒ์งธ์ ํจ์๊ฐ ์์ฐจ์ ์ผ๋ก ๋๋๋ฉด์ ์ข ๋ฃํ๊ฒ ๋๋ค.
์ฆ ํจ์์์ ํจ์์์ ํจ์๊ฐ ์๋ ํํ์๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ค์์ ์ฝ๋๋ก ํด๊ฒฐํ ์ ์๋ค.
๋ฐฉ๋ฌธ๋์๋ค๋ฉด ๋ฐ๋ก return true๋ฅผ ์ค์ผ๋ก์จ ํจ์๋ฅผ ์ข ๋ฃ์ํฌ ์ ์๊ณ , ๋ฐฉ๋ฌธ๋์ง์์ ์ํ๋ผ๋ฉด return ํจ์๋ฅผ ์ค์ผ๋ก์จ ํจ์์์ ํจ์๊ฐ ์๋ ๊ฒ์ด ์๋ ์๋ก์ด ํจ์๋ก ์ค์ฝํ๊ฐ ์ด๋๋๊ฒ ๋ง๋ค ์ ์๋ค.
import Foundation
let tc = Int(readLine()!)!
var visited = [Bool]()
var arr = [Int]()
var result = 0
func cycle(_ num: Int) -> Bool {
visited[num] = true
if visited[arr[num]] { return true }
return cycle(arr[num])
}
for _ in 0..<tc {
let N = Int(readLine()!)!
arr = Array(repeating: 0, count: N+1)
visited = Array(repeating: false, count: N+1)
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
for i in 1..<N+1 {
arr[i] = input[i-1]
}
for i in 1..<N+1 {
if !visited[i] {
if cycle(i) {
result += 1
}
}
}
print(result)
result = 0
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ(Swift) (0) | 2022.12.02 |
---|---|
๋ฐฑ์ค - ์๊ธฐ ์์ด(Swift) (0) | 2022.11.30 |
๋ฐฑ์ค - ๊ฐ์(Swift) (0) | 2022.11.29 |
๋ฐฑ์ค - ๋๋๊ณค ์ปค๋ธ(Swift) (0) | 2022.11.28 |
๋ฐฑ์ค - ๋ฏธ์ธ๋จผ์ง ์๋ !(Swift) (0) | 2022.11.23 |