ํ๋ด๊ธฐ๋ ์น๊ตฌ๊ฐ ํ์ํด(21736๋ฒ)
Silver 2
#๊ทธ๋ํ ์ด๋ก #๊ทธ๋ํ ํ์ #๋๋น ์ฐ์ ํ์ #๊น์ด ์ฐ์ ํ์
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
์บ ํผ์ค์ ๊ตฌ์กฐ๋ฅผ 2์ฐจ์ ๋ฆฌ์คํธ์ ๊ตฌ์กฐ๋ก ๋์ด ๋ค์์ ๋ฐฉ๋ฌธ ์ฌ๋ถ์ ๋ฒฝ(X)์ธ์ง ํ์ธํด ์์น๋ฅผ ์ด๋ํด ๊ฐ๋ฉด์ ๋ง๋๋ ์ฌ๋์ด ์๋์ง ํ์ธํด ์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ์ ์์ 1์ ์๋ก ๋ค์ด ๋ณด๊ฒ ๋ค.
3 5
OOOPO
OIOOX
OOOXP
ํ์ฌ ๋์ฐ์ด์ ์์น๊ฐ I์ด๊ธฐ ๋๋ฌธ์ ์์ ์ขํ๋ฅผ I๊ฐ์ด ์๋ ๊ณณ์ผ๋ก ์ง์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ฐ์ด๋ ์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ์ผ๋ก๋ง ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ์ ๋ ๊ทธ ์์น๋ก ์ด๋ํ ์ ์๋์ง ํ์ธํด ์ฃผ์ด์ผ ํ๋ค.
์ด๋ํ ์ ์๋ ์์น์ธ์ง ํ์ธํ๋ ์กฐ๊ฑด์ 2๊ฐ์ง๋ฅผ ์จ์ผ ํ๋ค.
1. ํ ๋ฒ๋ ๋ฐฉ๋ฌธํ ์ ์๋ ์์น์ธ์ง?
2. ํด๋น ์์น๊ฐ ๋ฒฝ(X)์ด ์๋์ง?
์ 2๊ฐ์ง์ ์กฐ๊ฑด์ ๋ชจ๋ ์ฒดํฌํด ์ฃผ์ด์ผ ํ๋ค. ๋ฐ๋ก Kotlin ์ฝ๋๋ก ํ์ธํด ๋ณด์.
<์กฐ๊ฑด 1>
ํ ๋ฒ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์์น์ธ์ง ํ์ธํ๋ ค๋ฉด, ์บ ํผ์ค์ ๋์ผํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง 2์ฐจ์ ๋ฆฌ์คํธ์ธ visited๋ฅผ ๋ฐ๋ก ์์ฑํด์ ๋์ฐ์ด๊ฐ ํด๋น ์์น๋ก ์ด๋ํ์ผ๋ฉด ์บ ํผ์ค์ ์์น์ ๋์ผํ ์์น์ visited๊ฐ์ ์ฒดํฌํด ์ฃผ๋ฉด ๋๋ค.
๋์ฐ์ด๊ฐ ํ ๋ฒ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์์น์ฌ์ผ ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
!visited[y][x]
<์กฐ๊ฑด 2>
๋์ฐ์ด๊ฐ ์ด๋ํ๋ ๊ฒฝ๋ก๊ฐ ๋ฒฝ(X)์ธ์ง ํ์ธํด ์ฃผ๋ ์กฐ๊ฑด์ด ํ์ํ๋ค. ์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
campus[y][x] != "X"
<์กฐ๊ฑด 3>
์ ์กฐ๊ฑด 2๊ฐ๋ฅผ ๋ชจ๋ ๋ง์กฑํ๋ค๋ฉด ์ด๋ํ ์ ์๋ ์์น๋ผ๋ ๋ป์ด๋ค.
๋ง์ง๋ง์ผ๋ก ์ด์ ์ด๋ํ๋ ๊ฒฝ๋ก์ ์ฌ๋(P)์ด ์๋์ง ํ์ธํด ์ฃผ๋ ์กฐ๊ฑด๋ ํ์ํ๋ค.
campus[y][x] == "P"
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
private var campus = arrayOf<List<String>>()
private var visited = arrayOf<BooleanArray>()
private var meetPersonCnt = 0
private val dx = listOf(-1, 1, 0, 0)
private val dy = listOf(0, 0, -1, 1)
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val (h, w) = readLine().split(" ").map { it.toInt() }
campus = Array(h) { List(w) { "" } }
visited = Array(h) { BooleanArray(w) }
var startPoint = listOf<Int>()
for (i in 0 until h) {
val map = readLine().map { it.toString() }
campus[i] = map
for (j in map.indices) {
if (map[j] == "I") startPoint = listOf(i, j)
}
}
bfs(startPoint[1], startPoint[0])
if (meetPersonCnt == 0) println("TT")
else println(meetPersonCnt)
}
private fun bfs(x: Int, y: Int) {
for (i in dx.indices) {
val mx = x + dx[i]
val my = y + dy[i]
if (mx in campus[0].indices && my in campus.indices) {
if (!visited[my][mx] && campus[my][mx] != "X") {
visited[my][mx] = true
if (campus[my][mx] == "P") meetPersonCnt++
bfs(mx, my)
}
}
}
}
๋ฌธ์ ํ์ด
์บ ํผ์ค ๊ทธ๋ํ์ ์บ ํผ์ค์ ๋์ผํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
์ฒ์์ ์บ ํผ์ค์ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋, ์ ๋ ฅ๋ฐ๋ ๊ฐ์ด I์ธ์ง ํ์ธํด์ ๋ฐ๋ก ๋ณ์์ ์ ์ฅํ๋ค. ์์ ์ง์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
์บ ํผ์ค์ ๊ฐ์ด ๋ชจ๋ ๋ค์ด๊ฐ๋ฉด bfs(๊น์ด ์ฐ์ ํ์ ํจ์)๋ฅผ ์ํํ๋ค.
์ฝ๋ ์๋จ์ ์ด๋ ์์น๋ฅผ ์ ์ฅํ ๋ณ์ dx, dy๋ฅผ ์์ฑํด ์ฃผ์๋ค. ์ ๋ณ์ 2๊ฐ๋ก ์์น๋ฅผ ์ด๋ํ ์ ์๋ค.
์ด๋ํ ์์น๊ฐ ์บ ํผ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋๋์ง ํ์ธํ๊ณ , ์กฐ๊ฑด 1๊ณผ ์กฐ๊ฑด 2๋ฅผ ๋ง์กฑํ ๋๋ง ์กฐ๊ฑด 3์ ์ํํ๋ค.
์กฐ๊ฑด 3์ด ๋ง์กฑํ์ง ์์๋ ์ฌ๊ท ํธ์ถ์ ํด์ผ ํ๋ค. ์ผ๋จ ๊ทธ๋ํ๋ ๋ค ์ํ๋ฅผ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์กฐ๊ฑด 3์ด ๋ง์กฑํ๋ค๋ฉด ์ฌ๋์ ๋ง๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์นด์ดํธ๋ฅผ ๋๋ ค ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ฌธ ์ฌ๋ถ ๊ทธ๋ํ์ ํ์๋ฅผ ํด์ฃผ๋ ๊ฒ๋ ์์ง ๋ง์.
ํจ์๊ฐ ์ข ๋ฃ๋ ํ, ๋ง๋ ์ฌ๋์ด ์์ผ๋ฉด TT๋ฅผ ์ถ๋ ฅํ๊ณ ์๋๋ฉด ๋ง๋ ์ฌ๋์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๊ธฐ์ด์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์ด๋ค.
๊ทธ๋ํ ํ์ ๊ธฐ์ด ๋ฌธ์ ๋ ์ค๋ฒ 2๋ถํฐ ์์ํ๋ ๋ฏํ๋ค.
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฃฐ ์ค ์๋ ๋์๊ฒ๋ ๋งค์ฐ ์ฌ์ด ๋ฌธ์ ์๋ค. ์์ง์ ๊ทธ๋ํ ํ์ ํ์ฉ์ด ๊ฐ๋ฅํ ๊ฒฝ์ง๋ ์๋๋ค.
'๐ฏ | ๋ฐฑ์ค > ๐ | Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, S1] ๋ฐฑ์ค 1389๋ฒ ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2024.08.05 |
---|---|
[Kotlin, S2] ๋ฐฑ์ค 30804๋ฒ ๊ณผ์ผ ํํ๋ฃจ (0) | 2024.08.05 |
[Kotlin, S2] ๋ฐฑ์ค 18111๋ฒ ๋ง์ธํฌ๋ํํธ (0) | 2024.08.03 |
[Kotlin, S3] ๋ฐฑ์ค 31409๋ฒ ์ฐฉ์ ์ ํ ์๋ (0) | 2024.08.02 |
[Kotlin, S4] ๋ฐฑ์ค 25184๋ฒ ๋๊ฐ์์ด ๊ตฌํ๊ธฐ (0) | 2024.08.01 |