[BOJ][๐ŸŸก5][๋ฐฑ์ค€#14503] ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14503


๋ฌธ์ œ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” Nร—M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1ร—1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์€ ๋ฒฝ ๋˜๋Š” ๋นˆ ์นธ์ด๋‹ค. ์ฒญ์†Œ๊ธฐ๋Š” ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด ์žˆ์œผ๋ฉฐ, ์ด ๋ฐฉํ–ฅ์€ ๋™, ์„œ, ๋‚จ, ๋ถ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , r์€ ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, c๋Š” ์„œ์ชฝ์œผ๋กœ ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ฒญ์†Œํ•œ๋‹ค. ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ธ์ ‘ํ•œ ์นธ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ํ•œ ์นธ์„ ์ „์ง„ํ•˜๊ณ  1๋ฒˆ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•œ๋‹ค. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์ฒญ์†Œํ•  ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด๋ฉด์„œ, ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ์ด๋ฏธ ์ฒญ์†Œ๋˜์–ด์žˆ๋Š” ์นธ์„ ๋˜ ์ฒญ์†Œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (3 โ‰ค N, M โ‰ค 50) ๋‘˜์งธ ์ค„์— ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ขŒํ‘œ (r, c)์™€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ d๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. d๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋Š” ๋ถ์ชฝ์„, 1์ธ ๊ฒฝ์šฐ์—๋Š” ๋™์ชฝ์„, 2์ธ ๊ฒฝ์šฐ์—๋Š” ๋‚จ์ชฝ์„, 3์ธ ๊ฒฝ์šฐ์—๋Š” ์„œ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์žฅ์†Œ์˜ ์ƒํƒœ๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ ์ค„์€ ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋นˆ ์นธ์€ 0, ๋ฒฝ์€ 1๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ง€๋„์˜ ์ฒซ ํ–‰, ๋งˆ์ง€๋ง‰ ํ–‰, ์ฒซ ์—ด, ๋งˆ์ง€๋ง‰ ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ์นธ์€ ๋ฒฝ์ด๋‹ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ƒํƒœ๋Š” ํ•ญ์ƒ ๋นˆ ์นธ์ด๋‹ค.


์ถœ๋ ฅ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฒญ์†Œํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

3 3
1 1 0
1 1 1
1 0 1
1 1 1


์ถœ๋ ฅ

1


์˜ˆ์ œ 2

์ž…๋ ฅ

11 10
7 4 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 1 1 0 1
1 0 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1


์ถœ๋ ฅ

57


My Sol

import sys; input = sys.stdin.readline

search = {
    0: [0, -1],
    1: [-1, 0],
    2: [0, 1],
    3: [1, 0]
}

back = {
    0: [1, 0],
    1: [0, -1],
    2: [-1, 0],
    3: [0, 1]
}

def turn(i, nd):
    global search
    global ni, nj

    if i == 4:
        return -1

    di, dj = search[nd%4]
    if mat[ni+di][nj+dj]==0:
        return nd%4
    else:
        return turn(i+1, nd-1)



H, W = map(int, input().split())
ni, nj, nd = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(H)]

mat[ni][nj] = 2
cnt = 1
ON = 1
while ON:
    # ์‚ฌ๋ฐฉ ํ™•์ธ
    pd = turn(0, nd)

    # ์‚ฌ๋ฐฉ์— 0์ด ์—†๋‹ค.
    if pd < 0:
        bi, bj = back[nd%4]
        # ํ›„์ง„ํ•˜๋Š” ๊ณณ์ด ๋ฒฝ
        if mat[ni+bi][nj+bj]==1:
            ON = 0
        else:
            ni += bi
            nj += bj


    # ํ•œ ๋ฐฉํ–ฅ์— 0์ด ์žˆ๋‹ค.
    else:
        nd = pd
        di, dj = search[nd%4]
        ni += di
        nj += dj
        mat[ni][nj] = 2
        cnt += 1
        nd -= 1

print(cnt)

๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์ฃผ๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ๋ฒˆ๊ฑฐ๋กœ์› ์ง€๋งŒ ๋ฌธ์ œ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€๋งŒ์€ ์•Š์•˜๋˜ ๋ฌธ์ œ์˜€๋‹ค. ํ˜„์žฌ ์ขŒํ‘œ์™€ ๋ฐฉํ–ฅ, ๋งต์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ˜•์‹์— ๋งž๊ฒŒ ์ถœ๋ ฅํ•ด์ฃผ๊ณ , ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ฐ˜๋ณตํ•ด์ค€๋‹ค. ๋ฐฉํ–ฅ์ด ์ˆœ์„œ๋Œ€๋กœ ์žˆ์–ด์„œ mod๋ฅผ ์ด์šฉํ•ด ์ฒญ์†Œ๊ธฐ๋ฅผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ ธ์œผ๋ฉฐ, dictionary๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐฉํ–ฅ์—์„œ ์™ผ์ชฝ์˜ ๋ธํƒ€ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

dfs๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด 4๋ฐฉํ–ฅ ๋ชจ๋‘๋ฅผ ์กฐํšŒํ•ด์„œ ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„์™”์„ ๋•Œ์—๋Š” ์‚ฌ๋ฐฉ์„ ๋” ์กฐํšŒํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด dfs๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ์ด๋•Œ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋นˆ ์นธ์„ ์™ผ์ชฝ์œผ๋กœ ๋‘๋Š” ๋ฐฉํ–ฅ์„ returnํ•˜์ง€๋งŒ 4๋ฐฉํ–ฅ ๋ชจ๋‘ 0์ด ์•„๋‹ˆ๋ผ๋ฉด -1์„ ์กฐํšŒํ•ด ์ด๋ฅผ ํ†ตํ•ด ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ