백준 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를 사용해 절댓값으로 출력
꽤나 간단하지만 꽤나 더러워 보이는 코드 군요 기분탓이겠죠.
우선 더러워 보이는 이유 중 하나를 해명하자면...^^
List에 append() 해주는 행위를 for문 마지막에 넣어준다면 꽤나 보기 편하겠지만... 시간이나 메모리를 너무 소요한다고 생각했습니다.
그 이후는 간단하게 절댓값 도출하는 abs() 사용해서 결과를 내줬습니다.
이쥐~