[๋ฐฑ์ค€-14503] ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ / Python

๐Ÿ“š Problem Solving/Baekjoon

 

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

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

www.acmicpc.net

import sys

input = sys.stdin.readline

n, m = map(int, input().split())
r, c, d = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
visited = [[0] * m for _ in range(n)]
visited[r][c] = 1

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]


def turnLeft():
    global d
    d -= 1
    if d == -1:
        d = 3


turnTime = 0
answer = 1
while True:
    turnLeft()
    nx = r + dx[d]
    ny = c + dy[d]
    if visited[nx][ny] == 0 and graph[nx][ny] == 0:
        visited[nx][ny] = 1
        r, c = nx, ny
        answer += 1
        turnTime = 0
        continue
    else:
        turnTime += 1
    if turnTime == 4:
        nx = r - dx[d]
        ny = c - dy[d]
        if graph[nx][ny] == 0:
            r, c = nx, ny
        else:
            break
        turnTime = 0

print(answer)

 

ํ•ด์„ค

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” 0์ธ ๊ณณ์„ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ์ฒญ์†Œ๋ฅผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฒญ์†Œ๋ฅผ ํ•œ ๊ณณ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

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