CodingTest/Baekjoon

[baekjoon] 백준 8911번(파이썬): 거북이

JunJangE 2022. 2. 16. 18:52

문제

 

8911번: 거북이

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

www.acmicpc.net

알고리즘

- 테스트 케이스만큼 반복

- 반복문을 통해 명령을 확인한다.

- 각 명령에 따라 다음 코드를 수행

- 매 반복마다 거북이가 지나간 영역의 최댓값과 최솟값을 초기화

- 명령이 끝난 후 거북이가 지나간 최대 영역을 출력

코드

import sys


t = int(sys.stdin.readline())
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
for _ in range(t):
    order = list(map(str, sys.stdin.readline().strip()))
    direction = 0 # 북: 0 서: 1 남: 2 동: 3
    min_x, min_y, max_x, max_y = 0, 0, 0, 0
    x, y = 0, 0

    # 반복문을 통해 명령을 확인
    for i in order:
        # 명령이 "F"라면 현재 방향으로 이동
        if i == "F":
            x += dx[direction]
            y += dy[direction]

        # 명령이 "B"라면 현재 방향의 뒷 방향으로 이동
        elif i == "B":
            x -= dx[direction]
            y -= dy[direction]

        # 명령이 "L"이라면 현재 방향의 왼쪽 방향으로 변경
        # 현재 방향이 동쪽이라면 북쪽인 0으로 초기화, 다른 방향은 +1
        elif i == "L":
            if direction == 3:
                direction = 0
            else:
                direction += 1

        # 명령이 "R"이라면 현재 방향의 왼쪽 방향으로 변경
        # 현재 방향이 북쪽이라면 동쪽인 0으로 초기화, 다른 방향은 -1
        elif i == "R":
            if direction == 0:
                direction = 3
            else:
                direction -= 1

        # 거북이가 지나간 영역의 최솟값과 최대값을 구한다.
        min_x = min(min_x, x)
        min_y = min(min_y, y)
        max_x = max(max_x, x)
        max_y = max(max_y, y)

    # 거북이가 지나간 영역을 출력
    print(abs(max_x - min_x) * abs(max_y - min_y))

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com