• Feed
  • Explore
  • Ranking
/
/
    코딩 테스트 풀이

    [백준] 32932 드론 조작

    Python
    J
    J. Hwang
    2025.05.10
    ·
    6 min read

    문제

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

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

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

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

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

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


    입력

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

    두 번째 줄부터 NNN개의 줄에 걸쳐 iii번째 장애물의 xxx좌표와 yyy좌표를 나타내는 두 정수 xix_ixi​와 yiy_iyi​가 공백으로 구분되어 주어진다. 단, 모든 장애물들의 위치는 다르고 원점 위에는 장애물이 없다. (−500≤xi,yi≤500)(-500 \leq x_i, y_i \leq 500)(−500≤xi​,yi​≤500) 

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


    출력

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


    내 풀이

    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







    - 컬렉션 아티클