728x90
반응형
SMALL
n, m, y, x 가 자주 헷갈리니 조심해야할 것 같다...
import sys
sys.setrecursionlimit(10 ** 4)
n, m = map(int, sys.stdin.readline().strip().split())
y, x, d = map(int, sys.stdin.readline().strip().split())
graphs = [list(map(int, sys.stdin.readline().strip().split())) for _ in range(n)]
answer = 0
dx, dy = [0 ,1 ,0, -1], [-1, 0, 1, 0]
# 북 동 남 서
def check():
global x, y, dx, dy, d, graphs, n, m
for direction in range(4):
nx = x + dx[direction]
ny = y + dy[direction]
if nx >= m or nx < 0 or ny >= n or ny < 0:
continue
if graphs[ny][nx] == 1:
continue
if graphs[ny][nx] == 0:
return False
return True
def move():
global x, y, graphs, d, dx, dy
x = x + dx[d]
y = y + dy[d]
def current_place_clear():
global x, y, graphs, answer
graphs[y][x] = "clear"
answer += 1
return
def move_back():
global x, y, dx, dy, d
x = x + dx[(d + 2) % 4]
y = y + dy[(d + 2) % 4]
return
def back_check(): #뒤 확인 후 갈 곳이 벽이면 종료.
global d, dx, dy, graphs
nx = x + dx[(d + 2) % 4]
ny = y + dy[(d + 2) % 4]
if nx >= m or nx < 0 or ny >= n or ny < 0:
return False
if graphs[ny][nx] == 1:
return True
return False
def trans90():
global d
d = (d + 3) % 4
def check_front():
global d, dx, dy, graphs
nx = x + dx[d]
ny = y + dy[d]
if nx >= m or nx < 0 or ny >= n or ny < 0:
return False
if graphs[ny][nx] == 1:
return False
if graphs[ny][nx] == "clear":
return False
return True
while True:
if graphs[y][x] == 0:
current_place_clear()
if check():
if back_check():
break
else:
move_back()
continue
else:
while True:
trans90()
if check_front():
break
move()
print(answer)
728x90
반응형
LIST
'코테' 카테고리의 다른 글
산타의 선물 공장2 (0) | 2023.03.24 |
---|---|
코드트리 빵 (0) | 2023.03.24 |
14499 - 주사위 굴리기 (0) | 2023.03.22 |
2048 (Easy) (0) | 2023.03.21 |
5373 큐빙 - Python (0) | 2023.03.09 |