t_게임개발_118

source github.com/ndb796/python-for-coding-test
topics
types 문제풀이

문제

n * m 직사각형 , 육지 0 바다1
바다 갈수없음, 상하좌우 이동가능

  1. 반시계 90도
  2. 가본칸없음 > 전진, else 1
  3. 다갈수없음, 방향유지한채 뒤로한칸후 1번순서로이동
    1. 뒤에가 바다일시 stop

나는 여기서 check_valid라고 arr안에 존재하는지 제한을 주었다.
여기서는 근데 외각이 항상 바다로 되어있다고 햇으므로 필요있진않았지만 있는게좋을듯^.^

import sys
# y,x
ways = [[-1,0],[0,1],[1,0],[0,-1]]
# 0이 육지다 북동남서순
# 0 육지 1 바다 -1 가본곳
# 실제로 갈건 반시계방향 > -1씩해야함
# 캐릭터가 방문한 칸수
col,row = map(int, sys.stdin.readline().split())
ny, nx, nway = map(int, sys.stdin.readline().split())
arr =[]
for c in range(col):
    arr.append(list(map(int, sys.stdin.readline().split())))

def check_valid(y,x):
    return x >-1 and y > -1 and x<row and y < col
arr[ny][nx] = -1
cnt = 1
miss = 0
while True:
    print(ny,nx,nway,miss,cnt)
    nway -= 1
    if nway<0:
        nway += 4
    tmpy = ny + ways[nway][0]
    tmpx = nx + ways[nway][1]
    if check_valid(tmpy,tmpx):
        if arr[tmpy][tmpx] == 0:
            arr[tmpy][tmpx] = -1
            ny = tmpy
            nx = tmpx
            miss = 0
            cnt +=1
            continue
    miss +=1
    if miss > 3:
        # 바라본 방향을 유지한 채 뒤로간다.
        ny -= ways[nway][0]
        nx -= ways[nway][1]
        if check_valid(ny,nx):
            if arr[ny][nx] != 1:
                miss = 0 
                continue
        break

print(cnt)