import sys
# sys.stdin.readline()
from collections import deque
sys.setrecursionlimit(100000000)
import heapq
INF = 1e9
def findpath(x,y,way):
count = 1
graph[x][y] = -1
flag = 0
way +=200
while True:
visitcount = 0
for _ in range(4):
nx = x + dx[(way-1)%4]
ny = y + dy[(way-1)%4]
if graph[nx][ny] == 0:
graph[nx][ny] = -1 # 방문 처리
count +=1
flag = 1
visitcount +=1
x,y = nx,ny
way -=1
if flag == 0: # 가보지 않은 칸이 없는 경우
way = (way -1) % 4 # 방향만 회전 후 1단계로 복귀
continue
if visitcount == 0: # 인접한 부분이 다 바다거나 이미 방문한 칸이라는 뜻
way = (way + 2) % 4
x += dx[(way-1)%4]
y += dy[(way-1)%4]
if graph[x][y] == 1:
return count
break
N,M = map(int,sys.stdin.readline().split())
x,y,way = map(int,sys.stdin.readline().split())
graph = []
for _ in range(N):
graph.append(list(map(int,sys.stdin.readline().split())))
dx = [-1,0,1,0]
dy = [0,1,0,-1] # 북 동 남 서
print(findpath(x,y,way))
볼때마다 느끼지만
코드를 너무 힘들게 짠다
way가 0->3->2->1 이렇게 가길래
하나씩 감소시키면서 4로 나눈 나머지를 쓰자는 아이디어로 했는데
답안에는 함수를 아예 만들어서
3,2,1,0 감소시키다가 -1이 되는 순간 3으로 하는 전역변수 함수를 썼다
역시 책이라 그런지 똑똑하다.
그냥 있는대로 구현했는데 발문 이해하는게 너무 힘들었다
국어를 잘해야 해 역시...
way를 200으로 해준 이유는 N,M이 곱하면 150 이내의 수가 나오고
어차피 4로 나눈 나머지를 사용할거기 때문에 적절한 4의 배수를 더해줬다 .
way = (way+2 ) % 4가 나온 이유는 현재 바라보는 반대방향으로 움직여야 하므로
이건 그림 그려보면 알 것 같다 !
'알고리즘 문제 풀이 > 이코테' 카테고리의 다른 글
[이코테] CH04 구현 실전문제 8번 문자열 재정렬 (2) | 2023.11.23 |
---|---|
[이코테] CH04 구현 실전문제 7번 럭키 스트레이트 (1) | 2023.11.22 |
[이코테] CH04 구현 실전문제 2번 왕실의 나이트 (0) | 2023.11.22 |
[이코테] CH03 그리디 실전문제 6번 무지의 먹방 라이브 (0) | 2023.11.19 |
[이코테] CH03 그리디 실전문제 5번 볼링공 고르기 (0) | 2023.11.19 |