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

단간단간·2024년 4월 30일
0

알고리즘 문제

목록 보기
89/106

문제 링크:

https://school.programmers.co.kr/learn/courses/30/lessons/87391


python

def solution(n, m, x, y, queries):
    left_up_location = [x, y]
    right_down_location = [x, y]

    for direction, distance in queries[::-1]:
        if direction == 0:
            # 끝지점에 있다면 영역을 넓히고
            if left_up_location[1] == 0:
                right_down_location[1] = min(right_down_location[1] + distance, m - 1)
            # 아니라면 옮긴다.
            elif left_up_location[1] + distance < m:
                left_up_location[1] += distance
                right_down_location[1] = min(right_down_location[1] + distance, m - 1)
            # 공을 굴려도 목적지에 닿을 수 없는 케이스
            else:
                break
        elif direction == 1:
            # 끝지점에 있다면 영역을 넓히고
            if right_down_location[1] == m - 1:
                left_up_location[1] = max(left_up_location[1] - distance, 0)
            # 아니라면 옮긴다.
            elif right_down_location[1] - distance >= 0:
                right_down_location[1] -= distance
                left_up_location[1] = max(left_up_location[1] - distance, 0)
            # 공을 굴려도 목적지에 닿을 수 없는 케이스
            else:
                break
        elif direction == 2:
            # 끝지점에 있다면 영역을 넓히고
            if left_up_location[0] == 0:
                right_down_location[0] = min(right_down_location[0] + distance, n - 1)
            # 아니라면 옮긴다.
            elif left_up_location[0] + distance < n:
                left_up_location[0] += distance
                right_down_location[0] = min(right_down_location[0] + distance, n - 1)
            # 공을 굴려도 목적지에 닿을 수 없는 케이스
            else:
                break
        else:
            # 끝지점에 있다면 영역을 넓히고
            if right_down_location[0] == n - 1:
                left_up_location[0] = max(left_up_location[0] - distance, 0)
            # 아니라면 옮긴다.
            elif right_down_location[0] - distance >= 0:
                right_down_location[0] -= distance
                left_up_location[0] = max(left_up_location[0] - distance, 0)
            # 공을 굴려도 목적지에 닿을 수 없는 케이스
            else:
                break
    else:
        return (right_down_location[0] - left_up_location[0] + 1) * (right_down_location[1] - left_up_location[1] + 1)

    return 0


if __name__ == "__main__":
    result = solution(2, 5, 0, 1, [[3, 1], [2, 2], [1, 1], [2, 3], [0, 1], [2, 1]])
    print(result)
2
profile
simple is best

0개의 댓글