있는 그대로 짜면 안되남
바둑판 시뮬레이션을 구현을 있는 그대로 짜면 된다 ( dx,dy 이용)
n = int(input())
k = int(input())
data = [[0] * (n+1) for _ in range(n+1)] # 맵정보
info = [] # 방향 회전 정보
# 맵 정보 (사과 있는 곳은 1로 표시)
for _ in range(k) :
a,b = map(int, input().split())
data[a][b] = 1
# 방향 회전 정보 입력
l = int(input())
for _ in range(l) :
x,c = input().split()
info.append(int(x), c)
# 처음에는 오른쪽을 보고 있으므로 (동,남,서,북)
dx = [0, 1, 0, -1]
dy = [1,0,-1,0]
def turn(direction, c) :
if c == 'L' :
direction = (direction - 1) % 4
else :
direction = (direction + 1) % 4
return direction
def simulate() :
x, y = 1, 1 # 뱀의 머리 위치
data[x][y] = 2 # 뱀이 존재하는 위치는 2로 표시
direction = 0 # 처음에는 동쪽을 보고 있음
time = 0 # 시작하고 지난 '초' 시간
index = 0 # 다음에 회전할 정보
q = [(x,y)] # 뱀이 차지하고 있는 위치 정보(꼬리가 앞쪽)
while True :
nx = x + dx[direction]
ny = y + dy[direction]
# 맵 범위 안에 있고, 뱀의 몸통이 없는 위치라면
if 1 <= nx and nx <= n and 1 <= ny and ny <= n and data[nx][ny] != 2 :
# 사과가 없다면 이동 후에 꼬리 제거
if data[nx][ny] = 2
q.append((nx, ny))
px, py = q.pop(0)
data[px][py] = 0
# 사과가 있다면 이동 후에 꼬리 그대로 두기
if data[nx][ny] == 1 :
data[nx][ny] = 2
q.append((nx, ny))
# 벽이나 뱀의 몸통과 부딪혔다면
else :
time += 1
break
x, y= nx, ny #다음 ㅜ이치로 머리를 이동
time += 1
if index < l and time == info[index][0] : #회전할 시간인 경우 회전
direction = turn(direction, info[index][1])
index += 1
return time
print(simulate())
진짜 있는그대로 하라는건데
있는 그대로 하기가 어렵다
특히 바둑판이 섞이면ㅠㅠ
그래도 C로 안해서 압도적 감사