Koala - 18기/코딩테스트 심화 스터디

[백준/python] 8911: 거북이

ㄱㅈㅅㅇ 2025. 4. 6. 18:03

https://www.acmicpc.net/problem/8911

 

기초적인 시뮬레이션 문제이다. 이동했을 때 가장 작은 x, y값과 가장 큰 x, y값을 기억했다가 크기를 구하면 된다.

이처럼 x, y의 상하좌우 배열을 만들어놓고 상태에 따라 인덱스를 바꿔끼는 풀이는 자주 보이니 기억해둬야겠다.

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


def control(s,x,y,dir):
        if s == 'F':
            x += dx[dir]
            y += dy[dir]
            return dir, x, y
        elif s == 'B':
             x -= dx[dir]
             y -= dy[dir]
             return dir, x, y
        elif s == 'L':
             if dir == 3: dir = 0
             else: dir += 1
        else:
             if dir == 0: dir = 3
             else: dir -= 1
        return dir, x, y

def main(): 
    t = int(input())
    for _ in range(t):
        case = list(input().strip())
        # print(case)
        dir = 3
        nowx = 0
        nowy = 0

        minx, miny, maxx, maxy = 0,0,0,0
        for s in case:
             dir, nowx, nowy = control(s,nowx, nowy, dir)

             minx = min(minx, nowx)
             miny = min(miny, nowy)
             maxx = max(maxx, nowx)
             maxy = max(maxy, nowy)
        
        print((maxx-minx)*(maxy-miny))