BOJ - 8911

주의·2024년 3월 5일
0

boj

목록 보기
213/214

백준 문제 링크
거북이

❓접근법

  1. L, R 명령을 함수로 만들어서 direction을 설정해야한다.
    L 명령이 나오면 direction -= 1 하는데,
    direction이 -1이 된다면 direction = 3 으로 바꿔준다.
    R 명령이 나오면 direction += 1 하는데,
    direction이 3을 초과하면 direction = 0으로 바꿔준다.
  2. 초기 좌표 x, y 모두 0으로, 처음 방향 direction = 0으로 (북쪽) 설정한다.
    이제 나머지 F, B 명령이 나올 때는 다음과 같다.
  • F일 때
    • direction이 0이면 y -= 1
    • direction이 1이면 x += 1
    • direction이 2이면 y += 1
    • direction이 3이면 x -= 1
  • B일 때
    • direction이 0이면 y += 1
    • direction이 1이면 x += 1
    • direction이 2이면 y += 1
    • direction이 3이면 x -= 1
  1. 방문한 좌표 (x, y) 를 visited = set() 을 만들어 넣어준다
  2. 이제 넓이를 구해야 하므로,
    x의 최솟값과 x의 최댓값,
    y의 최솟값과 y의 최댓값을 구해서
    세로 (h)는 y의 최솟값의 절댓값 + y의 최댓값의 절댓값
    가로 (w)는 x의 최솟값의 절댓값 + x의 최댓값의 절댓값
  3. 마지막으로 h * w를 출력하면 끝!

👌🏻코드

def turn_left():
    global direction
    direction -= 1
    if direction == -1:
        direction = 3

def turn_right():
    global direction
    direction += 1
    if direction > 3:
        direction = 0

for _ in range(int(input())):
    x, y = 0, 0
    direction = 0

    
    commands = list(input())
    visited = set()

    for command in commands:
        if command == 'F':
            if direction == 0:
                y -= 1
            elif direction == 1:
                x += 1
            elif direction == 2:
                y += 1
            else:
                x -= 1

        elif command == 'B':
            if direction == 0:
                y += 1
            elif direction == 1:
                x -= 1
            elif direction == 2:
                y -= 1
            else:
                x += 1

        elif command == 'L':
            turn_left()

        elif command == 'R':
            turn_right()

        visited.add((x,y))

    max_x, min_x = 0, 0
    max_y, min_y = 0, 0

    for x, y in visited:
        max_x, max_y = max(max_x, x), max(max_y, y)
        min_x, min_y = min(min_x, x), min(min_y, y)


    h = abs(max_y) + abs(min_y)
    w = abs(max_x) + abs(min_x)

    print(h * w)

0개의 댓글