์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
- ํ๋ก๊ทธ๋๋จธ์ค
- BFS
- RxSwift
- swift
- rxcocoa
- reactorkit
- ํจ์คํธ์บ ํผ์ค
- tableView
- realm
- ios
- Swfit
- SnapKit
- TCA
- designpattern
- CollectionView
- Flutter
- visionOS
- raywenderlich
- combine
- Lv2
- ๋ฐฑ์ค
- UIKit
- arkit
- node.js
- SwiftUI
- XCTest
- MVVM
- Kuring
- BOJ
- Xcode
- Today
- Total
lgvv98
[Swift] BOJ 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ ๋ณธ๋ฌธ
BOJ 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ
โ ์ค ์ผ๋จ ๋ฌธ์ ์ด๋ฆ์ด ์ ๋ง ๋ง์ ๋ ๋ค.
๊ฐ์คํ๊ณ , ์๊ณ ๋ฆฌ์ฆ์ ํ๋ฒ์ ํ ๋ ์ฌ๋ ธ๋๋ฐ, ์ด ๋ ผ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ์ ์ฝ๋๋ก ๊ตฌํํ๋ค๊ฐ ๋งํ์ ๊ทธ ๋ฌธ์ ๋ฅผ ๊ฑด๋ ๋ฐ๊ณ ํ๋ค๊ฐ ๊ทธ๋ฅ ๋ค์ ๋์ ํด๋ด.
์ผ๋จ ํ๊ธด ํ์๋๋ฐ ์๊ฐ์ 1์๊ฐ ๊ฑธ๋ฆผ.
์ด์ ๋ count๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ถ๋ถ์ด ๋ด ๋ ผ๋ฆฌ์ while์ ํ์ถํ๋ค๋ฉด queue๊ฐ ๋น๋ฉด์ ํ๋์ ๋ธ๋ญ(๊ทธ๋ฃน)์ด ๋ง๋ค์ด์ก๋ค๋ ๋ง๋ก ์ดํดํ๋๋ฐ, ๊ทผ๋ฐ visited ์ฒ๋ฆฌ ๋ถ๋ถ์์ ์ข ๊ผฌ์ธ๊ฒ ์์๋๋ด.
ํ์์ผ๋๊น ์ด๋ฒ ๋ฌธ์ ๋ ๋ฆฌ๋ทฐ๊ฐ ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒ ๊ฐ์์ ๋ฆฌ๋ทฐํจ.
โ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ๋ฒ.์ฐ์ ๋ฏธ๋ก ์ฐพ๊ธฐ ๋ฌธ์ ์ ๋ค๋ฅด๊ฒ ์๋ ์ด๋๊ฐ ์์ ํฌ์ธํธ๊ฐ ๋๋์ง ์ ์๊ฐ ์์.๊ทธ๋์ ์ด์ค for๋ฌธ์ ๋๋ฉด์ 1์ด ์ด๋์๋์ง ์ฐพ๊ณ ์ ํจ.๊ทธ๋ฆฌ๊ณ 1์ ์ฐพ์ผ๋ฉด ๊ทธ ์์น์์ BFS๋ฅผ ์ํํ์ฌ ๊ทธ๋ฃน์ ๋ง๋ค๊ณ ์ ํ์.
while์ ํ์ถํ๋ค๋ ์๋ฏธ๋ ์ฆ, BFS๋ฅผ ์ ์ฉํ์ฌ ์ํ์ข์ฐ๋ฅผ ๋ค ํ์ํ์ ๋,์ด๋ํ ์ฅ์๊ฐ ์๋ค๋ ๋์ด์ ์๋ค๋ ๋ง์.
์ด๋ํ ์ฅ์๊ฐ ์์ผ๋ฏ๋ก, ์นด์ดํธ๋ฅผ ํ๋ ์ฌ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์ด์ค for๋ฌธ์ ๋๋ฉด์ 1์ ์์น๋ฅผ ์ฐพ๋๋ค.
์ฌ๊ธฐ์ ์ด๋ฏธ ๋ง๋ค์ด์ง ๋ธ๋ญ์ ์ํ 1์ด๋ฉด visited๋ฅผ true๋ก ์ฒ๋ฆฌ๋ฅผ ํด๋์ด์ ๊ณ์ฐ์ ๋ค์ํ๋ ๊ฒ์ ๋ง๋๋ค.
โ ์ฝ๋
์ ์ถํ ๋๋ run๋ฉ์๋ ์์ ์๋ ์ฝ๋๋ง ์ ์ถํ๋ฉด ๋ฉ๋๋ค.
์ฃผ์ ์ ๋ฌ์ ๋์ด์ ํ๋ฆ ๋ฐ๋ผ๊ฐ๋ฉด์ ๊ผญ ๋ค์๋ณด์!!!!
//https://www.acmicpc.net/problem/1012
import Foundation
struct b1012 {
static func run() {
// Input ์ฒ๋ฆฌ
let n = Int(readLine()!)!
var answer = [Int]()
for _ in 0..<n { // ์ฌ๋ฌ๊ฐ์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ํํด์ผ ํ๋ฏ๋ก for๋ฌธ์ผ๋ก ๋ฐ๋ณต ํ์๋ฅผ ์ ํ๋ค.
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
var matrix = [[Int]](repeating: [Int](repeating: 0, count: input[1]), count: input[0])
var visited = [[Bool]](repeating: [Bool](repeating: false, count: input[1]), count: input[0])
for _ in 0..<input[2] {
let line = readLine()!.split(separator: " ").map{ Int(String($0))! }
matrix[line[0]][line[1]] = 1
}
// ์ํ์ข์ฐ
let dx = [-1, 1, 0, 0]
let dy = [0, 0, -1, 1]
var queue = [[Int]]()
var count = 0 // ํ ํ
์คํธ ์ผ์ด์ค์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ๋ ๋ณ์
for i in 0..<input[0] { // ํ์ฐ์ ๋ฐ๋ณต
for j in 0..<input[1] { // ์ด์ฐ์ ๋ฐ๋ณต
if matrix[i][j] == 1 && visited[i][j] == false { // ๊ทธ ํ์ ๊ฐ์ด 1์ด๊ณ , ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด
// BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฑํํจ
queue.append([i,j]) // queue์ ๋ฃ๋๋ค
while !queue.isEmpty { // ํ๊ฐ ๋น์ด์์ง ์๋ค๋ฉด ์ง์์ ์ผ๋ก ์ํ.
// ํ์ ์ ์ผ ์์ ๊ฐ์ ๋นผ๋ธ๋ค.
let x = queue[0][0]
let y = queue[0][1]
queue.removeFirst()
for i in 0..<4 { // ์ํ์ข์ฐ๋ฅผ ๋๋ค.
// ํ์์ ๊บผ๋ธ ๊ธฐ์ค๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ ๋ณ์๋ฅผ ํ๋์ฉ ์ ํด์ ํ์ํ๋ค.
let nx = x + dx[i]
let ny = y + dy[i]
// matrix์์ index๊ฐ ์์นํ๊ณ , ๋ฐฉ๋ฌธํ ์ ์๋ ์์น๋ผ๋ฉด
if nx >= 0 && ny >= 0 && nx < input[0] && ny < input[1] && visited[nx][ny] == false {
if matrix[nx][ny] == 1 { // ๊ทธ ์์น์ ๊ฐ์ด 1์ด๋ผ๋ฉด
queue.append([nx, ny]) // ํ์ ๋ฃ๊ณ
visited[nx][ny] = true // ๊ฐ์ด 1์ธ ์ฌ๊ธฐ๋ ๋ฐฉ๋ฌธํ๋ค๊ณ ์ฒ๋ฆฌ
/* (์ฃผ์)
๋ชจ๋ ๊ณณ์ visited์ฒ๋ฆฌํ์ง ์๊ณ 1๋ก ์ ํด์ง ์์น๋ฅผ ๋ฐฉ๋ฌธํ๋์ง๋ง ํ์ธํ๋ฉด ๋๋ฏ๋ก
1์ธ ์์น๊ฐ ๋ฐฉ๋ฌธํ๋์ง ์ํ๋์ง๋ง ์ฒดํฌํจ.
*/
}
}
} // for
} // while
count += 1 // while๋ฌธ์ ํ์ถํ๋ค๋ ๊ฑด, ์ฐ์์ ์ผ๋ก ์ด์ด์ง์ง ์์ ํ๋์ ๋ธ๋ญ์ด ๋ง๋ค์ด์ก๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ด๋ ์นด์ดํ
}
}
}
answer.append(count)
}
answer.forEach {
print($0)
}
}
}
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] BOJ 7576 ํ ๋งํ (0) | 2022.04.03 |
---|---|
[Swift] BOJ 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2022.04.03 |
[Swift] BOJ 2606 ๋ฐ์ด๋ฌ์ค (0) | 2022.04.03 |
[Swift] BOJ 2178 ๋ฏธ๋ก ํ์ (0) | 2022.04.02 |
[Swift] BOJ 10844 ์ฌ์ด ๊ณ๋จ ์ (0) | 2022.04.02 |