거북이 (8911) [실버 2]

Polla·2023년 4월 18일

백준BOJ

목록 보기
2/4
post-thumbnail

백준 BOJ 거북이 8911 실버2 파이썬


🔥 문제

상근이는 자신의 컨트롤 프로그램으로 거북이가 이동한 영역을 계산해보려고
한다. 거북이는 항상 x축과 y축에 평행한 방향으로만 이동한다.
거북이가 지나간 영역을 모두 포함할 수 있는 가장 작은 직사각형의 넓이를
구하는 프로그램을 작성하시오.
단, 직사각형의 모든 변은 x축이나 y축에 평행이어야 한다.


🥳 해결


생각

1. dx,dy로 상하좌우 만들어주기
2. 가장 작은 직사각형의 넓이를 구할 수 있는 방법 찾기.
3. max,min 사용하면 좋지 않을지....?

우선 코드 먼저

T = int(input())
testcases = [input() for _ in range(T)]

dx = [0, -1, 0, 1]   # 상좌하우
dy = [1, 0, -1, 0]

for i in testcases:
    list_x = [0]     # 좌표를 저장할 리스트
    list_y = [0]
    direction = 0    # 방향을 저장할 리스트
    x,y = 0,0        # 현재 좌표
    for j in i:
        if j == 'L':
            if direction == 3: # 인덱스를 넘을 경우 초기화
                direction = 0
            else:
                direction += 1
        elif j == 'R':
            if direction == 0:
                direction = 3
            else:
                direction -= 1
        elif j == 'F':
            x += dx[direction] # 해당 방향으로 이동
            y += dy[direction]
            list_x.append(x)
            list_y.append(y)
        else:
            x -= dx[direction]
            y -= dy[direction]
            list_x.append(x)
            list_y.append(y)
    print(abs(max(list_x)-min(list_x)) * abs(max(list_y)-min(list_y)))
    # 최소 결과 넓이, abs를 사용해 절댓값으로 출력

꽤나 간단하지만 꽤나 더러워 보이는 코드 군요 기분탓이겠죠.

우선 더러워 보이는 이유 중 하나를 해명하자면...^^
Listappend() 해주는 행위를 for문 마지막에 넣어준다면 꽤나 보기 편하겠지만... 시간이나 메모리를 너무 소요한다고 생각했습니다.

그 이후는 간단하게 절댓값 도출하는 abs() 사용해서 결과를 내줬습니다.

이쥐~


profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글