ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

14503๋ฒˆ: ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” N×M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1×1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ์˜ ๋™์ž‘ ๋กœ์ง์ด ์ •ํ•ด์ ธ๊ณ , ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ตœ๋Œ€ ๋ช‡ ์นธ์„ ์ฒญ์†Œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

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

 

 ํ•œ ์ง€์ ์— ๋Œ€ํ•ด 2๋ฒˆ๊ณผ ๊ฐ™์€ ํƒ์ƒ‰ ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„, DFS๋กœ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์˜€์„ ๋•Œ ๋” ์ด์ƒ ํƒ์ƒ‰์ด ์ง„ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ๋ผ๋ฉด ์ฒญ์†Œํ•œ ์นธ์„ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋„๋ก ํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


def dfs(cur_x, cur_y, cur_dir):
    X, Y = 0, 1
    global answer
    dirs = ((-1, 0), (0, 1), (1, 0), (0, -1))

    if graph[cur_x][cur_y] == 1:
        print(answer)
        exit()

    for _ in range(4):
        next_dir = (cur_dir + 3) % 4
        next_x, next_y = cur_x + dirs[next_dir][X], cur_y + dirs[next_dir][Y]

        if not graph[next_x][next_y]:
            graph[next_x][next_y] = 2
            answer += 1
            dfs(next_x, next_y, next_dir)
            return

        cur_dir = next_dir

    # ํ›„์ง„ ํ•˜๋Š” ๊ฒฝ์šฐ
    dfs(cur_x - dirs[cur_dir][X], cur_y - dirs[cur_dir][Y], cur_dir)

if __name__ == "__main__":
    answer = 1
    n, m = map(int, stdin.readline().split())
    r, c, d = map(int, stdin.readline().split())
    graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
    graph[r][c] = 2
    dfs(r, c, d)

 ์ตœ์ดˆ์— ์ž‘์„ฑํ•  ๋•Œ๋Š” ํ˜„์žฌ ๋ฐฉํ–ฅ์—์„œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€ํ™” ํ•  ๋•Œ, L, R, U, D์™€ ๊ฐ™์€ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ ์ž‘์„ฑํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ตณ์ด ๊ทธ๋Ÿด ํ•„์š” ์—†์ด ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ๋‹ค์Œ ๋ฐฉํ–ฅ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€