[백준] 32932 드론 조작

Python
avatar
2025.05.10
·
6 min read

문제

좌표평면의 원점 위에 드론이 있다. 이 드론에는 네 가지 명령어를 입력할 수 있다. 입력할 수 있는 명령어는 다음과 같다.

  • U: 드론의 yy좌표를 1증가시킨다.

  • D: 드론의 yy좌표를 1 감소시킨다.

  • R: 드론의 xx좌표를 1 증가시킨다.

  • L: 드론의 xx좌표를 1 감소시킨다.

좌표평면 위에는 장애물도 NN개 있다. 만약 드론이 이동하려는 칸에 장애물이 있다면 이동하지 못하고 제자리에 있게 된다. 장애물들의 위치와 드론에 입력된 명령어가 주어졌을 때 드론의 최종 위치를 구해보자.


입력

첫 번째 줄에 장애물의 개수 NN과 입력된 명령어의 개수 KK가 공백으로 구분되어 주어진다. (1N,K500)(1 \leq N,K \leq 500)

두 번째 줄부터 NN개의 줄에 걸쳐 ii번째 장애물의 xx좌표와 yy좌표를 나타내는 두 정수 xix_iyiy_i가 공백으로 구분되어 주어진다. 단, 모든 장애물들의 위치는 다르고 원점 위에는 장애물이 없다. (500xi,yi500)(-500 \leq x_i, y_i \leq 500)

N+2N+2번째 줄에는 드론에 입력된 명령어들이 문자열로 주어진다. 주어진 문자열의 각 문자는 U, D, R, L중 하나이다.


출력

모든 명령어가 입력되었을 때, 드론이 있는 위치의 xx좌표와 yy좌표를 공백으로 구분하여 출력한다.


내 풀이

import sys
input = sys.stdin.readline

n, k = map(int, input().split())
obstacles = [list(map(int, input().split())) for _ in range(n)]
moves = input().strip()
drone = [0, 0]

for i in range(k):
    dx, dy = 0, 0
    if moves[i] == 'U':
        dy = 1
        
    elif moves[i] == 'D':
        dy = -1
        
    elif moves[i] == 'L':
        dx = -1
        
    elif moves[i] == 'R':
        dx = 1
    
    nx, ny = drone[0]+dx, drone[1]+dy
    
    if [nx, ny] not in obstacles:
        drone = [nx, ny]
    
print(*drone) 

코멘트

이동"하려는" 칸에 장애물이 있는지 확인하고 이동해야 한다.


References

https://www.acmicpc.net/problem/32932







- 컬렉션 아티클