백준 문제풀이

백준 8911 - 거북이 [Python]

Vermeil 2021. 3. 29. 08:39

www.acmicpc.net/problem/8911

 

8911번: 거북이

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 컨트롤 프로그램이 주어진다. 프로그램은 항상 문제의 설명에 나와있는 네가지 명령으로만 이루어져

www.acmicpc.net

단순 구현문제다.

거북이가 간 점들의 최대, 최소가 되는 x좌표와 y좌표로 직사각형의 넓이를 구할 수 있다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import sys
input = sys.stdin.readline
 
= int(input())
 
def fr():
    k[0= min(now[0], k[0])
    k[1= min(now[1], k[1])
    k[2= max(now[0], k[2])
    k[3= max(now[1], k[3])
 
def go(m):
    for i in range(2):
        now[i] += p[m][i]
    fr()
 
while t:
    t -= 1
    k = [0,0,0,0#minX, minY, maxX, maxY
    s = list(input())
    now = [0,0]
    d = 0
    p = [[0,1], [1,0], [0,-1], [-1,0]]
    for i in s:
        if i == "F":
            go(d)
        if i == "B":
            go((d+2)%4)
        if i == "L":
            d -= 1
            d %= 4
        if i == "R":
            d += 1
            d %= 4
    # print(k)
    print((k[2]-k[0])*(k[3]-k[1]))
cs