[프로그래머스] 87391 공 이동 시뮬레이션

이강혁·2024년 8월 17일
0

프로그래머스

목록 보기
68/79
post-custom-banner

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의 범위 안에 있는 점의 개수를 계산해서 반환하였다.

profile
사용자불량
post-custom-banner

0개의 댓글