https://school.programmers.co.kr/learn/courses/30/lessons/87391
공 이동하는 명령이 있는데, 이동시키다가 만약 벽을 만나면 멈추고 다음 명령 수행하는 방식으로 했을 때 도착위치가 주어지고, 여기에 도달할 수 있는 점의 개수를 찾는 문제이다.
def solution(n, m, x, y, queries):
x1, x2 = x, x
y1, y2 = y, y
for c, ds in reversed(queries):
if c == 0:
y2 = min(m - 1, y2 + ds)
y1 = max(0, y1 + ds) if y1 > 0 else 0
elif c == 1:
y1 = max(0, y1 - ds)
y2 = min(m - 1, y2 - ds) if y2 < m - 1 else m - 1
elif c == 2:
x2 = min(n - 1, x2 + ds)
x1 = max(0, x1 + ds) if x1 > 0 else 0
elif c == 3:
x1 = max(0, x1 - ds)
x2 = min(n - 1, x2 - ds) if x2 < n - 1 else n - 1
if x1 > x2 or y1 > y2:
return 0
return (x2 - x1 + 1) * (y2 - y1 + 1)
도착점부터 시작해서 명령을 수행하면서 가질 수 있는 좌표의 최대와 최소값을 구했다.
벽을 고려해서 계산을 하였고, 만약 최대 최소값이 뒤집어 진다면 도달할 수 있는 위치가 없다고 판단, 0을 반환하였고, 아니라면 y1, y2, x1, x2의 범위 안에 있는 점의 개수를 계산해서 반환하였다.