๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S2] ๋ฐฑ์ค€ 21736๋ฒˆ ํ—Œ๋‚ด๊ธฐ๋Š” ์นœ๊ตฌ๊ฐ€ ํ•„์š”ํ•ด

by immgga 2024. 8. 4.

์ถœ์ฒ˜: unsplash.com

 

ํ—Œ๋‚ด๊ธฐ๋Š” ์นœ๊ตฌ๊ฐ€ ํ•„์š”ํ•ด(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๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋“ฏํ•˜๋‹ค.

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค๋ฃฐ ์ค„ ์•„๋Š” ๋‚˜์—๊ฒŒ๋Š” ๋งค์šฐ ์‰ฌ์šด ๋ฌธ์ œ์˜€๋‹ค. ์•„์ง์€ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์ง€๋Š” ์•„๋‹ˆ๋‹ค.

728x90