IN
맵의 세로크기 N, 맵의 가로크기 M
게임 캐릭터의 좌표와 바라보는 방향
→ 방향: 북0 동1 남2 서3
맵이 육지인지 바다인지에 대한 정보
→ 0: 육지, 1: 바다
OUT
문제
캐릭터는 11크기의 정사각형으로 이루어진 NM크기의 맵에서 이동
각 칸은 바다 또는 육지로 이루어져있는데 바다는 지날 수 x
움직이는 조건은
현재 방향 기준 '왼쪽부터' 빈칸 둘러보기
1.1 바로 왼쪽이 방문x?
: 왼쪽으로 회전 후 왼쪽으로 한칸
1.2 바로 왼쪽이 방문 o
: 왼쪽으로 회전만 하고 이동은 x
네 방향 이미 가본칸/4면이 바다인 경우
: 뒤로 한칸, 뒤쪽이 바다면 종료
def solution():
N, M = map(int, input().split())
pos = list(map(int, input().split()))
map_info = []
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
dir_count = 0
count = 1
for i in range(N):
arr = list(map(int, input().split()))
map_info.append(arr)
map_info[pos[0]][pos[1]] = 2
while True:
if dir_count > 4:
back = (pos[2]+2) % 4
pos[1] += dx[back]
pos[0] += dy[back]
if map_info[pos[0]][pos[1]] == 1:
break
else:
dir_count = 0
#바라보는 방향 기준 왼쪽을 방문했는지 ?
left = (pos[2]+3)%4
if map_info[pos[0]+dy[left]][pos[1]+dx[left]] == 0:
#왼쪽 방문한적 없음
pos[2] = left
pos[1] += dx[pos[2]]
pos[0] += dy[pos[2]]
map_info[pos[0]][pos[1]] = 2
count += 1
dir_count = 0
else:
pos[2] = left
dir_count += 1
print("pos: ", pos, " count: ", dir_count)
print(map_info)
return count
print(solution())
육지는 0, 바다는 1, 방문한 육지에 대해서는 2로 처리함
→ 처음 시작점도 방문했으므로 초기에 2로 설정해줘야함!!
왼쪽으로 회전 → (현재위치 + 3)%4
뒤로 이동 → (pos[2]+2) % 4