4/14 스터디 문제

hyejun sang·2022년 4월 14일
0

알고리즘

목록 보기
19/28
post-thumbnail

1번 문제.
https://www.acmicpc.net/problem/8911
-> 거북이

1번 문제 풀이 코드

import sys

# 테스트 케이스 입력
t = int(sys.stdin.readline())
# 이동 및 방향을 리스트에 담기
move = []
# 북서남동 -> 북(0, 1), 서(-1, 0), 남(0, -1), 동(1, 0)
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]

# 이동 및 방향 하나씩 입력 받기
for _ in range(t):
    move.append(list(map(str, sys.stdin.readline().strip())))

# move 리스트에서 리스트 하나씩 꺼내기
for idx in move:
    # 각 리스트의 x, y값들을 초기화
    x, y = 0, 0
    # 최대, 최소 값을 초기화
    max_x, max_y = 0, 0
    min_x, min_y = 0, 0
    # 방향 지시를 위함 - > 북0, 서1, 남2, 동3
    direction = 0
    # 리스트를 하나씩 뜯어서 생각하기
    for i in idx:
        # 만약 리스트 값들 중에 "F"가 있다면, 방향 지시에 맞춰 1칸 앞으로 이동
        if i == "F":
            x += dx[direction]
            y += dy[direction]

        # 만약 리스트 값들 중에 "B"가 있다면, 방향 지시에 맞춰 1칸 뒤로 이동
        elif i == "B":
            x -= dx[direction]
            y -= dy[direction]

        # 만약 리스트 값들 중에 "L"이 있다면, 방향을 하나씩 더해줌
        # 내가 방향을 북서남동 즉, 반시계 방향으로 설정했기 때문
        elif i == "L":
            if direction == 3:
                direction = 0
            else:
                direction += 1

        # 만약 리스트 값들 중에 "R"이 있다면, 방향을 하나씩 빼줌
        # 오른쪽으로 계속 방향을 바꾸면 시계방향임
        elif i == "R":
            if direction == 3:
                direction = 0
            else:
                direction -= 1

        # x, y의 최소값, 최대값을 각각 구함
        min_x = min(min_x, x)
        min_y = min(min_y, y)
        max_x = max(max_x, x)
        max_y = max(max_y, y)

    # 두번째 for문에서 빠져나와서 계산
    # 최대값과 최소값의 차이가 (-)가 될 수 있기 때문에 절대값을 씌워줌
    print(abs(max_x - min_x) * abs(max_y - min_y))

=======================================================
오늘은 여기까지

0개의 댓글