본문 바로가기
Algorithm(BOJ, Python)/Simulation

[백준_8911] 거북이 python

by kurooru 2022. 8. 3.

dx, dy테크닉을 이용하여 문제를 해결해 보았다.

# 북 동 남 서 순으로 dx, dy 설정
dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]

# t 입력
t = int(input())
for _ in range(t):
    
    # 북쪽 바라보고 시작
    dir_num = 0
    
    # x, y 초기설정
    x, y = 0, 0

    # 최소 최댓값 설정
    min_x, max_x, min_y, max_y = 0, 0, 0, 0
    
    # order 입력
    orders = input()

    for order in orders:
        # 전진
        if order == 'F':
            x, y = x + dx[dir_num], y + dy[dir_num]
        # 후진
        elif order == 'B':
            x, y = x + dx[(dir_num + 2) % 4], y + dy[(dir_num + 2) % 4]
        # 왼쪽 90도 회전
        elif order == 'L':
            dir_num = (dir_num - 1 + 4) % 4
        # 오른쪽 90도 회전
        elif order == 'R':
            dir_num = (dir_num + 1) % 4
        
        # 최대 최소 관리
        if x < min_x:
            min_x = x
        if x > max_x:
            max_x = x
        if y < min_y:
            min_y = y
        if y > max_y:
            max_y = y

    # 출력
    print((max_x - min_x) * (max_y - min_y))