๋ฌํฝ์ด 2(1952๋ฒ)
Bronze 1
#์ํ #๊ตฌํ #์๋ฎฌ๋ ์ด์
https://www.acmicpc.net/problem/1952
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
M * N์ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋๋ฉด์ ๊บพ์ธ ์ง์ ์ด ์ด ๋ช ๊ฐ์ธ์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
์ฃผ์ํด์ผ ํ๋ ์ ์ ํ ๋ฒ ์ง๋ ๋ถ๋ถ์ ๋ค์ ์ง๋์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
์ํ์ ์ผ๋ก ๊ท์น์ ์ฐพ์์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ๋ฉ์ฒญํ ๊ด๊ณ๋ก ๋ฌด์ง์ฑ ์ ์ฒด ํ์์ ํ ๊ฒ์ด๋ค.
2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ booleanํ์ผ๋ก ์์ฑํ๋ฉด ํ ๋ฒ ์ง๋ ๋ถ๋ถ์ true๋ก ์ค์ ํ๊ณ ์กฐ๊ฑด์ ๋ฌ๋ฉด ๋ผ์ ํ ๋ฒ ์ง๋ ๋ถ๋ถ์ ์ฒดํฌํ ๋ ํธํ๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val (h, w) = readLine().split(" ").map { it.toInt() }
val map = Array(h) { BooleanArray(w) }
val moveX = listOf(1, 0, -1, 0)
val moveY = listOf(0, 1, 0, -1)
var res = 0
map[0][0] = true
var currentX = 0
var currentY = 0
var m = 0
while (true) {
while (currentY in map.indices && currentX in 0 until map[currentY].size) {
val mx = moveX[m] + currentX
val my = moveY[m] + currentY
if (my in map.indices && mx in 0 until map[my].size) {
if (!map[my][mx]) {
map[my][mx] = true
currentX = mx
currentY = my
} else break
} else break
}
val afterMove = if (m == 3) 0 else m + 1
val afterX = currentX + moveX[afterMove]
val afterY = currentY + moveY[afterMove]
if (afterY in map.indices && afterX in 0 until map[0].size && !map[afterY][afterX]) {
res++
m = afterMove
} else break
}
println(res)
}
๋ฌธ์ ํ์ด
์ ๋ ฅ๋ฐ์ m, n์ ๊ธฐ์ค์ผ๋ก 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ด๋ํ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ผ moveX, moveY๋ฅผ ์์ฑํ๋ค. moveX, moveY๋ฅผ ์ํ์ํค๋ฉด์ ๋ฆฌ์คํธ๋ฅผ ์ํํ ๊ฒ์ด๋ค.
์์ ๋ถ๋ถ์ธ 0, 0์ true๋ก ์ง์ ํด ์ฃผ๊ณ , ์ง์ ํ move๋งํผ ์ด๋ํ๋ฉด์ list์ ๋๊น์ง ์ด๋ํ๋ค.
์ด๋ํ๋ฉด์ map์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ true๋ก ์ค์ ํด ์ค๋ค.
์ด๋ํ๋ฉด์ ์์ง์ธ index๋ ๊ณ์ ์ ์ฅํด ์ค๋ค.
๋๊น์ง ์ด๋ํ๊ณ ๋๋ฉด ์ด์ ๋ฐฉํฅ์ ๊บพ์ด์ผ ํ๋ค.
๊บพ์ ๋ฐฉํฅ์ afterMove๋ก move์ index๋ฅผ ์ง์ ํด ๋ค์์ ์์ง์ผ ๋ฐฉํฅ์ด ๋ฆฌ์คํธ ์์ ํฌํจ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธ์ด ์๋ ๊ฐ์ผ ๋ ๊บพ์ ํ์๋ฅผ ๋๋ ค ์ฃผ๊ณ m์ afterMove๋ก ๊ต์ฒดํ๋ค.
์ด๋ฌ๋ฉด ๊ณ์ moveX, moveY์์ ์ค์ ํ ์ด๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋๊ฒ ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
์ํ์ ์ผ๋ก ํ๋ฉด ์ฝ๋ค. ํ์ง๋ง ์ ํด๋ด์ ๋ชจ๋ฅธ๋ค. ํ์ง๋ง ์ฝ๋๊ฐ ๋ง์ด ์งง์์ง๊ณ ๋น ๋ฅด๊ฒ ๋์ํ ๊ฒ์ด๋ค.
๋๋ ์ํ์ ์ผ๋ก ํด๊ฒฐํ๋ ค๋ค๊ฐ ๊ท์น์ ๋ชป ์ฐพ๊ณ ์ ์ฒด ํ์์ผ๋ก ๋ฐ๊ฟจ๋ค.
์ ์ฒด ํ์์ผ๋ก ๊ตฌํํ๋ฉด ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ์ index๊ฐ ๋ฆฌ์คํธ๋ฅผ ๋ฒ์ด๋์ง๋ ์๋์ง ์ฒดํฌํด์ผ ํ๋ค. ๊ทธ๋์ ๊ตฌํ๋ ๊ท์ฐฎ๊ณ ์ค์๊ฐ ๋ง์ด ๋ ์ ์๋ค.
'๐ฏ | ๋ฐฑ์ค > ๐ | Bronze' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, B1] ๋ฐฑ์ค 20632๋ฒ ์ ๋๋์ ํด์ฆ์ผ (0) | 2024.08.28 |
---|---|
[Kotlin, B1] ๋ฐฑ์ค 15629๋ฒ Africa (0) | 2024.08.22 |
[Kotlin, B1] ๋ฐฑ์ค 16433๋ฒ ์ฃผ๋์ ๋น๊ทผ๋์ฅ (0) | 2024.08.07 |
[Kotlin, B2] ๋ฐฑ์ค 31215๋ฒ ์ด์ํ ์๊ธฐ ์ฐ์ฐ (0) | 2024.08.07 |
[Kotlin, B1] ๋ฐฑ์ค 25593๋ฒ ๊ทผ๋ฌด ์ง์ฅ์ ๋น ์ง ํธ์์ด (Small) (0) | 2024.07.31 |