[백준] 8911 거북이

백준 8911 거북이

문제

상근이는 2차원 평면 위에서 움직일 수 있는 거북이 로봇을 하나 가지고 있다.

거북이 로봇에게 내일수 있는 명령은 다음과 같다.

  1. F: 한 눈금 앞으로
  2. B: 한 눈금 뒤로
  3. L: 왼쪽으로 90도 회전
  4. R: 오른쪽으로 90도 회전

상근이는 자신의 컨트롤 프로그램으로 거북이가 이동한 영역을 계산해보려 한다.

거북이가 지나간 영역을 모두 포함할 수 있는 가장 작은 직사각형이 넓이를 구하는 프로그램을 작성하시오.

거북이는 처음에 (0, 0)에 있으며 북쪽을 쳐다보고 있다.

입력

  • 첫째줄: 테스트 케이스의 개수 T
  • 네가지 명령으로 이루어져 있으며 길이는 500을 넘지 않는다.

해결 방식

  1. 거북이가 움직인 위치를 모두 기록한다.
  2. 기록된 위치의 최대 x 좌표 - 최소 x좌표 = 가로 길이
  3. 기록된 위치의 최대 y 좌표 - 최소 y좌표 = 가로 길이

코드

N = int(input())

dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]

for i in range(N):
    x, y, direction = 0, 0, 0
    move = list(input())
    position = [(x, y)]
    for j in move:
        if j == "F":
            x = x + dx[direction]
            y = y + dy[direction]
        elif j == "B":
            x = x - dx[direction]
            y = y - dy[direction]
        elif j == "L":
            if direction == 3:
                direction = 0
            else:
                direction += 1
        elif j == "R":
            if direction == 0:
                direction = 3
            else:
                direction -= 1
        position.append((x, y))
    width = max(position, key = lambda x:x[0])[0] - min(position, key = lambda x:x[0])[0]
    height = max(position, key = lambda x:x[1])[1] - min(position, key = lambda x:x[1])[1]
    print(width * height)

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus