์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- SnapKit
- rxcocoa
- Lv2
- BOJ
- visionOS
- ios
- swift
- designpattern
- Flutter
- reactorkit
- realm
- arkit
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค
- tableView
- raywenderlich
- Xcode
- RxSwift
- Swfit
- combine
- Kuring
- TCA
- ํจ์คํธ์บ ํผ์ค
- XCTest
- UIKit
- CollectionView
- MVVM
- node.js
- SwiftUI
- BFS
- Today
- Total
lgvv98
[Swift] BOJ 2178 ๋ฏธ๋ก ํ์ ๋ณธ๋ฌธ
BOJ 2178 ๋ฏธ๋ก ํ์
โ BFS ๋ฌธ์ ์๋ค.
DFS์ ๊ฒฝ์ฐ์๋ ํ๋์ ๋ ธ๋๋ฅผ ๊น๊ฒ ํ์ํ์ฌ ๊ทธ ๋ ธ๋๊ฐ ์ต์ ๊ฐ์ด ์๋๋ฉด ๊ธฐํ๋น์ฉ์ด ๋ ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋๋น ์ฑ ์์๋ DFS๋ณด๋ค BFS๊ฐ ์ผ๋ฐ์ ์ธ ์ฝ๋ฉํ ์คํธ์์ ๋ ๋น ๋ฅด๋ค๊ณ ๊ถ์ฅํจ.
์ผ๋จ BFS์ ์์ง ์ต์์น ์์์ ์ด๋ ค์ ์.
๊ทธ๋์ ๋ฌธ์ ํ๋ฉด์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์ ํ์ด ์ด๋ ๊ฒ N x M ๋ฐฐ์ด์์ ๋ฌด์ธ๊ฐ ์ต์ ์ ๊ฐ์ ๊ตฌํ๊ฑฐ๋ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฑ์ ์์ ์ด๋ฉด ์ง์ง ํ๋ค์์.
๋๋ฆ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๊ฒ ๋ค๊ณ ํ ๊ฒ์ด ์ฌ๊ท๋ฅผ ์ด์ฉํ์ฌ ํ์ด๋ณด๋ ค๋ ์๋๋ฅผ ์์ฃผ ๋ง์ด ํด๋ณด์์ผ๋, ๋๋ถ๋ถ fail.
BFS ๊ณต๋ถ๋ ์ง์ง ๋ง์ด ํ๋๋ฐ, ์ ์ฉ์ด ๋์ ํ ์๋๊ฒ ์ด์ ๊ตฌ๊ธ๋ง์ ๋์์ ๋ฐ์ ์ ์ฉ์์ผ๋ด
โ ์๊ณ ๋ฆฌ์ฆ ์์
1. queue์ ์์์ ์ ์ธํ ํ๋ค.
2. ํ์ฌ์์น์์ ์ํ์ข์ฐ 4๋ฒ์ ์ด๋์ด ๊ฐ๋ฅํ๋ฏ๋ก for๋ฌธ์ ๋๋ฉด์ ๋ค์๋ฒ ์ด๋ ๊ฐ๋ฅํ ์์น(nx,ny)๊ฐ์ ๊ตฌํ๋ค.
3. ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋๋ค.
if (๋ณด๋์์ ๋ค์๋ฒ ์ขํ๊ฐ ์์นํ๋ค.) && (์ด์ ์ ๋ฐฉ๋ฌธํ๋ ์ฅ์๊ฐ ์๋๋ค.) {
if (๋ณด๋์ ์ขํ๊ฐ ์ด๋ ๊ฐ๋ฅํ ๊ฐ(1)์ด๋ค.) {
1. ํ์ ์ด๋ ๊ฐ๋ฅํ ์์น๋ฅผ ๋ฃ์ด์ค๋ค.
2. ์ด ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
3. ๋ฐฉ๋ฌธํ ์ขํ๋ฅผ true๋ก ๋ณ๊ฒฝํ๋ค.
}
}
๋ด๋ถ if๋ฌธ์์ ์ด ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ 2๋ฒ์ด ํต์ฌ์ด๋ค.
์ด ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด๋์ ๋ค์ ์์น์ ํ์ฌ ์์น๊ฐ + 1์ ํด์ฃผ๋ฉด ๋๋ค.
ํ์ฌ ์์น๊ฐ์ ์ด๋์ ํ๋ฉด์ ํญ์ ๊ฐฑ์ ์ด ๋๋ฏ๋ก ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
๐ ์ฝ๋
//https://www.acmicpc.net/problem/2178
import Foundation
struct b2178 {
static func run() {
// Input ์ฒ๋ฆฌ
let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
var board = [[Int]](repeating: [], count: input[0])
for i in 0..<input[0] {
let v = readLine()!.map { Int("\($0)")! }
board[i].append(contentsOf: v)
}
// print(board)
// ์ํ์ข์ฐ ์ธํ
let dx = [-1, 1, 0, 0]
let dy = [0, 0, -1, 1]
var queue = [[0,0]] // ํ
var visited = [[Bool]](repeating: [Bool](repeating: false, count: input[1]), count: input[0]) // ๋ฐฉ๋ฌธํ๋์ง ํ์ธ
var nx = 0
var ny = 0
// ์์์ขํ ์ธํ
var x = queue[0][0]
var y = queue[0][1]
visited[0][0] = true
while !queue.isEmpty {
x = queue[0][0]
y = queue[0][1]
queue.removeFirst() // append๋ก ๋ฃ์ ๊ฒ์ด๋ผ์ FIFO ์ ์ฉ
for i in 0..<4 {
// ์ด๋ ๊ฐ๋ฅํ ์ขํ ๊ณ์ฐ
nx = x + dx[i]
ny = y + dy[i]
// ์ขํ๊ฐ board์ ์ขํ๋ฅผ ๋ฒ์ด๋์ง ์์ผ๋ฉด
if nx >= 0 && ny >= 0 && nx < input[0] && ny < input[1] && visited[nx][ny] == false {
if board[nx][ny] == 1 {
queue.append([nx, ny])
board[nx][ny] = board[x][y] + 1 // ์ด ์ด๋๊ฑฐ๋ฆฌ ๊ณ์ฐ
visited[nx][ny] = true // ๋ฐฉ๋ฌธํ ๊ณณ์ true๋ก ๋ณ๊ฒฝ
// print("-> \(queue) \n -> \(board)")
}
}
}
}
print(board[input[0]-1][input[1]-1])
}
}
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] BOJ 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2022.04.03 |
---|---|
[Swift] BOJ 2606 ๋ฐ์ด๋ฌ์ค (0) | 2022.04.03 |
[Swift] BOJ 10844 ์ฌ์ด ๊ณ๋จ ์ (0) | 2022.04.02 |
[Swift] BOJ 2158 ํฌ๋์ฃผ ์์ (0) | 2022.04.02 |
[Swift] BOJ 1912 ์ฐ์ํฉ (0) | 2022.04.02 |