1번 문제.
https://www.acmicpc.net/problem/8911
-> 거북이
import sys
# 테스트 케이스 입력
t = int(sys.stdin.readline())
# 이동 및 방향을 리스트에 담기
move = []
# 북서남동 -> 북(0, 1), 서(-1, 0), 남(0, -1), 동(1, 0)
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
# 이동 및 방향 하나씩 입력 받기
for _ in range(t):
move.append(list(map(str, sys.stdin.readline().strip())))
# move 리스트에서 리스트 하나씩 꺼내기
for idx in move:
# 각 리스트의 x, y값들을 초기화
x, y = 0, 0
# 최대, 최소 값을 초기화
max_x, max_y = 0, 0
min_x, min_y = 0, 0
# 방향 지시를 위함 - > 북0, 서1, 남2, 동3
direction = 0
# 리스트를 하나씩 뜯어서 생각하기
for i in idx:
# 만약 리스트 값들 중에 "F"가 있다면, 방향 지시에 맞춰 1칸 앞으로 이동
if i == "F":
x += dx[direction]
y += dy[direction]
# 만약 리스트 값들 중에 "B"가 있다면, 방향 지시에 맞춰 1칸 뒤로 이동
elif i == "B":
x -= dx[direction]
y -= dy[direction]
# 만약 리스트 값들 중에 "L"이 있다면, 방향을 하나씩 더해줌
# 내가 방향을 북서남동 즉, 반시계 방향으로 설정했기 때문
elif i == "L":
if direction == 3:
direction = 0
else:
direction += 1
# 만약 리스트 값들 중에 "R"이 있다면, 방향을 하나씩 빼줌
# 오른쪽으로 계속 방향을 바꾸면 시계방향임
elif i == "R":
if direction == 3:
direction = 0
else:
direction -= 1
# x, y의 최소값, 최대값을 각각 구함
min_x = min(min_x, x)
min_y = min(min_y, y)
max_x = max(max_x, x)
max_y = max(max_y, y)
# 두번째 for문에서 빠져나와서 계산
# 최대값과 최소값의 차이가 (-)가 될 수 있기 때문에 절대값을 씌워줌
print(abs(max_x - min_x) * abs(max_y - min_y))
=======================================================
오늘은 여기까지