백준 문제 링크
거북이
- L, R 명령을 함수로 만들어서 direction을 설정해야한다.
L 명령이 나오면 direction -= 1 하는데,
direction이 -1이 된다면 direction = 3 으로 바꿔준다.
R 명령이 나오면 direction += 1 하는데,
direction이 3을 초과하면 direction = 0으로 바꿔준다.- 초기 좌표 x, y 모두 0으로, 처음 방향 direction = 0으로 (북쪽) 설정한다.
이제 나머지 F, B 명령이 나올 때는 다음과 같다.
- F일 때
- direction이 0이면 y -= 1
- direction이 1이면 x += 1
- direction이 2이면 y += 1
- direction이 3이면 x -= 1
- B일 때
- direction이 0이면 y += 1
- direction이 1이면 x += 1
- direction이 2이면 y += 1
- direction이 3이면 x -= 1
- 방문한 좌표 (x, y) 를 visited = set() 을 만들어 넣어준다
- 이제 넓이를 구해야 하므로,
x의 최솟값과 x의 최댓값,
y의 최솟값과 y의 최댓값을 구해서
세로 (h)는 y의 최솟값의 절댓값 + y의 최댓값의 절댓값
가로 (w)는 x의 최솟값의 절댓값 + x의 최댓값의 절댓값- 마지막으로 h * w를 출력하면 끝!
def turn_left():
global direction
direction -= 1
if direction == -1:
direction = 3
def turn_right():
global direction
direction += 1
if direction > 3:
direction = 0
for _ in range(int(input())):
x, y = 0, 0
direction = 0
commands = list(input())
visited = set()
for command in commands:
if command == 'F':
if direction == 0:
y -= 1
elif direction == 1:
x += 1
elif direction == 2:
y += 1
else:
x -= 1
elif command == 'B':
if direction == 0:
y += 1
elif direction == 1:
x -= 1
elif direction == 2:
y -= 1
else:
x += 1
elif command == 'L':
turn_left()
elif command == 'R':
turn_right()
visited.add((x,y))
max_x, min_x = 0, 0
max_y, min_y = 0, 0
for x, y in visited:
max_x, max_y = max(max_x, x), max(max_y, y)
min_x, min_y = min(min_x, x), min(min_y, y)
h = abs(max_y) + abs(min_y)
w = abs(max_x) + abs(min_x)
print(h * w)