๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 14503 ๋กœ๋ด‡์ฒญ์†Œ๊ธฐ(Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 9. 26.

<ํ’€์ด ์ „๋žต>

  1. ๊ตฌํ˜„ ๋ฌธ์ œ๋ผ ํŠน๋ณ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•„์š” ์—†๊ณ  ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ๋‚ด์šฉ์„ ์ •์งํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
  2. ๋ฐฉํ–ฅ ์ฒ˜๋ฆฌ๊ฐ€ ์ข€ ๋ณต์žกํ•ด์„œ ์‹ ๊ฒฝ ์จ์•ผ๋œ๋‹ค.(๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด ์ฃผ์–ด์ง€๊ณ  ๊ทธ ์ƒํƒœ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ ๋ฐ ์ด๋™, ๋’ค๋กœ ์ด๋™)
  3. ์ฒญ์†Œํ•œ ์˜์—ญ์„ ๋ฒฝ์ด๋ž‘ ๋˜‘๊ฐ™์€ 1๋กœ ํ‘œ์‹œํ•˜๋ฉด ์•ˆ๋œ๋‹ค.(-1 ๊ฐ™์ด 0, 1 ํ˜น์€ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ์ฒ˜๋ฆฌ)

<์ •๋‹ต์ฝ”๋“œ>

# 220827 14503 ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

# ์ •๋‹ต์ฝ”๋“œ

import sys
input = sys.stdin.readline

# N: ๋ฐฉ์˜ ์„ธ๋กœ ํฌ๊ธฐ, M: ๋ฐฉ์˜ ๊ฐ€๋กœ ํฌ๊ธฐ
N, M = map(int, input().split())
# r, c, d: ์ฒญ์†Œ๊ธฐ์˜ ์‹œ์ž‘ ์œ„์น˜์™€ ๋ฐฉํ–ฅ
r, c, d = map(int, input().split())
# room: ๋ฐฉ์˜ ์ƒํƒœ
room = [list(map(int, input().split())) for _ in range(N)]

# ํƒ์ƒ‰ ๋ฐฉํ–ฅ(๋ถ์ชฝ, ๋™์ชฝ, ๋‚จ์ชฝ, ์„œ์ชฝ์„ ๋ณด๊ณ  ์žˆ์„ ๋•Œ์˜ ์™ผ์ชฝ ํƒ์ƒ‰)
dr = [0, -1, 0, 1]
dc = [-1, 0, 1, 0]

# ๋ฐฉ ์ฒญ์†Œ ํ•จ์ˆ˜ ์„ ์–ธ
def clean(r, c, d, room):

    # cnt: ์ฒญ์†Œํ•œ ์นธ์˜ ๊ฐœ์ˆ˜
    # ์ถœ๋ฐœ ์ง€์  ์ฒญ์†Œ ๋ฐ cnt ์„ธ์ฃผ๊ธฐ
    room[r][c] = -1
    cnt = 1
    
    # ๋ฉˆ์ถœ ๋•Œ๊นŒ์ง€ ์ฒญ์†Œ
    while True:
        # ์™ผ์ชฝ ํšŒ์ „
        nr = r + dr[d]
        nc = c + dc[d]

        # ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ์˜์—ญ์ผ ๊ฒฝ์šฐ
        if room[nr][nc] == 0:
            # ์ฒญ์†Œ๊ธฐ ์ด๋™ ํ›„ ์ฒญ์†Œ
            r = nr
            c = nc
            room[r][c] = -1
            # ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ ๋ฐ˜์˜
            if d == 0:
                d = 3
            else:
                d -= 1
            # cnt ์„ธ์ฃผ๊ธฐ
            cnt += 1

        # ์ด๋ฏธ ์ฒญ์†Œํ•œ ์˜์—ญ์ด๊ฑฐ๋‚˜ ๋ฒฝ์ผ ๊ฒฝ์šฐ
        else:
            # ๋‚˜๋จธ์ง€ 3 ๋ฐฉํ–ฅ ํƒ์ƒ‰
            for i in range(1, 4):
                if d - i < 0:
                    nd = d - i + 4
                else:
                    nd = d - i

                # ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณณ์ด ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ ์‹œ์ผœ์ฃผ๊ณ  ๋‹ค์‹œ ์ฒญ์†Œ ์ง„ํ–‰
                nr = r + dr[nd]
                nc = c + dc[nd]
                if room[nr][nc] == 0:
                    d = nd                
                    break

            # ํƒ์ƒ‰ ๊ฒฐ๊ณผ ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณณ์ด ์—†์„ ๊ฒฝ์šฐ
            else:
                # ๋ฐ”๋กœ ๋’ค ํƒ์ƒ‰
                nd = (d + 3) % 4
                nr = r + dr[nd]
                nc = c + dc[nd]
                # ๋ฒฝ์ผ ๊ฒฝ์šฐ ์ฒญ์†Œ ์ข…๋ฃŒ
                if room[nr][nc] == 1:
                    break
                # ๋ฒฝ์ด ์•„๋‹ ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™
                else:
                    r = nr
                    c = nc

    # ์ฒญ์†Œํ•œ ์นธ์˜ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ ํ›„ ๋ฐ˜ํ™˜
    print(cnt)
    return

# ์ฒญ์†Œ ์‹ค์‹œ!
clean(r, c, d, room)
 

 

๋Œ“๊ธ€