2022. 11. 14. 11:19ใAlgorithm
๋ฐฑ์ค - ๋ก๋ด ์ฒญ์๊ธฐ(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/14503
๋์ ํ์ด
์ฒ์์๋ ์์ ํ์์ผ๋ก DFS๋ก ํ๋ ค๊ณ ํ์ผ๋ ์์ 2๋ฅผ ๋ณด๋ 0์ ์๊ฐ ๋งํ์์ง์์๋ฐ ์ ์ฒด๊ฐ ์๋ ๊ฒ์ ๋ณด๊ณ ์ ํํ๊ฒ ๊ตฌํ์ ํด์ผํ๋ ๋ฌธ์ ์ธ ๊ฒ์ ์์๋ค. ๊ฐ๋จํ ์๊ฐํด๋ณด๋ฉด ๊ธธ์ด์์๋ ์ญ ๊ฐ๋ค๊ฐ ๋งํ์๋ ๋ค์ชฝ์ด 1์ด๋ผ๋ฉด ๋ฐ๋ก breakํด์ผํ๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ์์ด ์๋ ๊ฒ์ ์ ์ ์๋ค.
ํ์ง๋ง ๋ฐฉํฅ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋๋ฐ ๋ฐฉํฅ์ ๋ํ ๋ณ์๋ฅผ dx, dy์ ๋ฃ์์ผ๋ก์จ ๊ตฌํํ ์ ์์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์งํ ๋์ ํ์งํ ๋ ํ์ฌ ๋ฐฉํฅ์ ์ธ๋ฑ์ค๋ก ๋ ์ผ๋ก์จ ์ฝ๊ฒ ๊ตฌํ์ ํ ์ ์๊ฒ ๋๋ค.
import Foundation
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
let N = input[0], M = input[1]
let input2 = readLine()!.components(separatedBy:" ").map{Int($0)!}
var curR = input2[0], curC = input2[1], curD = input2[2] // ํ์ฌ x, y์ขํ์ ๋ฐฉํฅ
var map = [[Int]]()
for _ in 0..<N {
map.append(readLine()!.components(separatedBy:" ").map{Int($0)!})
}
// ๋ถ ๋ ๋จ ์
let dx = [-1, 0, 1, 0]
let dy = [0, 1, 0, -1]
var cnt = 0 // ์ ํํ ํ์
var result = 1
map[curR][curC] = 2
while true {
// ๋ฐฉํฅ ์ ํ
curD -= 1
if curD == -1 { curD = 3 }
// ๋ฐฉํฅ ์ ํํ ๊ฐ
let nx = curR + dx[curD]
let ny = curC + dy[curD]
// ๋ฒฝ์ด๊ฑฐ๋ ๋ฐฉ๋ฌธํ ๊ฐ์ด ์๋ ๋
if map[nx][ny] != 1 && map[nx][ny] != 2 {
map[nx][ny] = 2
result += 1
curR = nx
curC = ny
cnt = 0
continue
} else {
cnt += 1 // ๋ฒฝ์ด๊ฑฐ๋ ๋ฐฉ๋ฌธํ๋ค๋ฉด cnt๋ง ์ฆ๊ฐ
}
if cnt == 4 {
curR -= dx[curD]
curC -= dy[curD]
cnt = 0
// ๋ค๋ก ๊ฐ ๊ฐ์ด ๋ฒฝ์ด๋ผ๋ฉด ์ข
๋ฃ
if map[curR][curC] == 1 {
break
}
}
}
print(result)
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ๋น๋ฌผ(Swift) (0) | 2022.11.15 |
---|---|
๋ฐฑ์ค - ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด(Swift) (0) | 2022.11.14 |
๋ฐฑ์ค - ํ ์ค๋ก ์๊ธฐ(Swift) (0) | 2022.11.11 |
๋ฐฑ์ค - ๋ญํน์ ๋๊ธฐ์ด(Swift) (1) | 2022.11.11 |
๋ฐฑ์ค - NBA๋๊ตฌ(Swift) (0) | 2022.11.10 |