문제
코드
My answer
import sys
input=sys.stdin.readline
t=int(input())
for i in range(t):
rom=[]
pos=[0,0]
nav=[1,0,0,0]
mxposx,mnposx,mxposy,mnposy=0,0,0,0
command=input()
for j in command:
if(nav[0]==1):
if(j=='F'):
pos[1]+=1
elif(j=='B'):
pos[1]-=1
elif(j=='L'):
nav[0],nav[2]=0,1
elif(j=='R'):
nav[0],nav[3]=0,1
elif(nav[1]==1):
if(j=='F'):
pos[1]-=1
elif(j=='B'):
pos[1]+=1
elif(j=='L'):
nav[1],nav[3]=0,1
elif(j=='R'):
nav[1],nav[2]=0,1
elif(nav[2]==1):
if(j=='F'):
pos[0]-=1
elif(j=='B'):
pos[0]+=1
elif(j=='L'):
nav[2],nav[1]=0,1
elif(j=='R'):
nav[2],nav[0]=0,1
else:
if(j=='F'):
pos[0]+=1
elif(j=='B'):
pos[0]-=1
elif(j=='L'):
nav[3],nav[0]=0,1
elif(j=='R'):
nav[3],nav[1]=0,1
mxposx=max(mxposx,pos[0])
mnposx=min(mnposx,pos[0])
mxposy=max(mxposy,pos[1])
mnposy=min(mnposy,pos[1])
result=(mxposx-mnposx)*(mxposy-mnposy)
print(result)
Another answer
dx = (-1, 1, 0, 0)
dy = (0, 0, -1, 1)
dirL = (2, 3, 1, 0)
dirR = (3, 2, 0, 1)
for _ in range(int(input())):
move = list(input().strip())
min_x, min_y, max_x, max_y = 0, 0, 0, 0
x, y, d = 0, 0, 0
for m in move:
if m == "L":
d = dirL[d]
continue
elif m == "R":
d = dirR[d]
continue
elif m == "F":
x += dx[d]
y += dy[d]
elif m == "B":
x -= dx[d]
y -= dy[d]
min_x = min(min_x, x)
min_y = min(min_y, y)
max_x = max(max_x, x)
max_y = max(max_y, y)
print(abs(max_x - min_x) * abs(max_y - min_y))
풀이
이 문제는 시뮬레이션 문제로 문제자체는 쉽게 이해되고 생각하기 쉽지만 구현할 때 어려움을 겪는다고 한다. 다행히 이번 거북이 문제는 간단했는데 내 코드는 쓸데없이 반복되는 부분이 많았는데 아래 코드는 방향을 저렇게 리스트로 처리하니까 불필요한 부분을 없앨 수 있었던 것 같다.
728x90
반응형