๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/1743
๊ฐ๋จํ๊ฒ ์ํ์ข์ฐ๋ก ์์ง์ผ ์ ์๊ณ ๊ทธ ์ฐ๋ ๊ธฐ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ํ์ด
DFS๋ก ํ์ด๋ดค๋ค. 2์ฐจ์๋ฐฐ์ด๋ก map๊ณผ visited ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ฐ๋ ๊ธฐ๋ฉด 1, ์๋๋ฉด 0์ผ๋ก ํ์ํ๋ค.
1000
0110
1100
์์ ์์ ์์ ์ด๋ ๊ฒ..
๊ทธ๋ฆฌ๊ณ for๋ฌธ์ ๋๋ฉด์ ์ฐ๋ ๊ธฐ์ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ์ DFS๋ฅผ ๋๋ ค์ฃผ๋ฉฐ count๋ฅผ +1 ํด์ฃผ์๋ค.
DFS๊ฐ ๋๋๊ณ ๋์ฌ ๋๋ ๋ค์ count๋ฅผ 0์ผ๋ก ์ด๊ธฐํํด์ฃผ๊ณ count๊ฐ ์ ์ผ ํฐ ๊ฐ์ ์ ์ฅํด์ฃผ๋ฉด ๋๋ค.
์ฝ๋
import Foundation
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let height = input[0], width = input[1], k = input[2]
var map = Array(repeating: Array(repeating: 0, count: width), count: height) // ์ฐ๋ ๊ธฐ ์์ผ๋ฉด 1 ์์ผ๋ฉด 0
var visited = Array(repeating: Array(repeating: false, count: width), count: height)
let dy = [0, 0, -1, 1] // ์ํ์ข์ฐ
let dx = [-1, 1, 0, 0]
var answer = Int.min
var count = 0
for _ in 0..<k {
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let h = input[0]-1, w = input[1]-1
map[h][w] = 1 // ์ฐ๋ ๊ธฐ๋ 1
}
func DFS(_ x: Int, _ y: Int) {
visited[y][x] = true // ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
count += 1 // ์ฐ๋ ๊ธฐ ๊ฐ์ ์ถ๊ฐ
for i in 0..<4 {
let nx = dx[i] + x
let ny = dy[i] + y
// map์ ๋ฒ์์ ์๊ณ ๋ฐฉ๋ฌธํ์ง ์์๊ณ ์ฐ๋ ๊ธฐ์ธ ๊ฒฝ์ฐ์๋ง DFS ๋๋ฆผ
if nx >= 0 && nx < width && ny >= 0 && ny < height && !visited[ny][nx] && map[ny][nx] == 1 {
DFS(nx, ny)
}
}
}
for y in 0..<height {
for x in 0..<width {
if map[y][x] == 1 && !visited[y][x] { // ์ฐ๋ ๊ธฐ์ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ๋ง DFS ๋๋ฆผ
count = 0
DFS(x, y)
answer = max(answer, count) // DFS ๋ค ๋๋ฆฌ๊ณ ๋์จ ์ฐ๋ ๊ธฐ ๊ฐ์์ max๊ฐ ์ ์ฅ
}
}
}
print(answer)
ํ๊ธฐ
์ฌ์ค ๋ํ์ ์ธ ํ์ ๋ฌธ์ ์ธ๋ฐ.. ์ค๋๋ง์ DFS ๋ฌธ์ ๋ฅผ ํ์ด์ ๋ง์ด ํค๋งธ๋ค..ใ ใ
๋ฌธ์ ๋ฅผ ์๋ชป ์๊ฐํด์ depth๋ก ํ๋ค๊ฐ ๋ค์ ์๊ฐํด๋ณด๋ ์์ ์๋ชป๋ ํ์ด์๋ค....ใ ใ
func DFS(_ x: Int, _ y: Int, _ depth: Int) {
answer = max(answer, depth) // DFS์ ๊น์ด ๊ณ์ฐ
visited[y][x] = true // ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
for i in 0..<4 {
let nx = dx[i] + x
let ny = dy[i] + y
// map์ ๋ฒ์์ ์๊ณ ๋ฐฉ๋ฌธํ์ง ์์๊ณ ์ฐ๋ ๊ธฐ์ธ ๊ฒฝ์ฐ์๋ง DFS ๋๋ฆผ
if nx >= 0 && nx < width && ny >= 0 && ny < height && !visited[ny][nx] && map[ny][nx] == 1 {
DFS(nx, ny, depth+1)
}
}
}
์ด๋ฐ ์์ผ๋ก DFS์ ๊น์ด๋ฅผ ๋ํด๊ฐ๋๋ฐ ๋ฌธ์ ๋ ๊น์ด๊ฐ ์๋๋ผ DFS๋ฅผ ๋๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด์๋ค,,๐
count๋ก ๊ฐ์๋ฅผ ๋ํด๊ฐ๋ ๊ฑธ๋ก ์์ ํ๋๋ ๋ฐ๋ก ํ๋ฆผ
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค 150368] ์ด๋ชจํฐ์ฝ ํ ์ธํ์ฌ swift (1) | 2023.10.25 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค 86971] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ swift (2) | 2023.10.13 |
[๋ฐฑ์ค 1654] swift ๋์ ์๋ฅด๊ธฐ (0) | 2023.03.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ฐจ ์์ถ swift (0) | 2023.03.22 |
[๋ฐฑ์ค 9935] swift ๋ฌธ์์ด ํญ๋ฐ (1) | 2023.03.21 |