새소식

PS/백준

[백준/13901] 로봇 (Python)

  • -

Problem : https://www.acmicpc.net/problem/13901

 

Difficulty : Silver 2

 

Status : Solved

 

Time : 00:21:31

 


문제 설명

 

더보기

 

해빈이는 로봇을 좋아한다. 로봇을 가지고 놀던 해빈이는 로봇에게 계속해서 명령을 내려 움직이는 대신 이동할 방향을 미리 지정하여 로봇이 알아서 움직이도록 하였다.  이 로봇은 다음과 같은 규칙을 가지고 움직인다.

로봇은 사용자가 지정한 방향을 일직선으로 움직인다.
이동 중 벽이나 방문한 지역, 장애물을 만날 경우 로봇은 사용자가 지정한 다음 방향으로 움직인다.
사용자가 지정한 다음 방향이 없다면 맨 처음 방향으로 돌아가서 위의 과정을 반복한다.
로봇이 움직일 수 없을 경우 동작을 멈춘다. 

 

입력으로 방의 크기와 장애물의 개수, 각 장애물들의 위치, 로봇의 시작 위치, 이동 방향의 순서가 주어졌을 때 로봇이 멈추는 위치를 출력하시오. 위치 (0, 0)은 왼쪽 위를 가리키며 방의 크기가 R * C일 때 오른쪽 아래 위치는 (R - 1, C - 1)이 된다. (R은 세로의 크기를 C은 가로의 크기를 말한다.)

 

 

입력 및 출력

 

더보기

입력

 

첫 번째 줄에는 방의 크기 R, C(3 ≤ R, C ≤ 1,000)가 입력된다. 두 번째 줄에는 장애물의 개수 k(0 ≤ k ≤ 1,000)가 입력된다. 다음 k개의 줄에는 각 장애물 위치 br(0 ≤ br ≤ R – 1), bc(0 ≤ bc ≤ C - 1)가 주어진다. 그 다음 순서대로 로봇의 시작 위치 sr(0 ≤ sr ≤ R – 1), sc(0 ≤ sc ≤ C - 1)와 이동 방향의 순서(총 4개가 입력되는데 1은 위 방향, 2은 아래 방향, 3은 왼쪽 방향, 4는 오른쪽 방향을 나타낸다)가 한 줄씩 입력된다. 로봇의 시작위치에 장애물이 있는 경우는 없다.

 

출력

 

로봇의 마지막 위치 r, c를 출력한다.

 

입력 예시

 

3 3
1
1 0
1 1
1 2 3 4

 

출력 예시

 

0 0

 

 


 

풀이

 

구현 문제. 로봇은 현재 진행방향을 기준으로 4번 동안 경로 업데이트의 기회를 얻으며, 4번 모두 실패할 경우 더 이상 움직일 수 없다는 의미이므로 탐색을 종료하고 좌표를 추력하면 된다. 이외에는 기본적인 경로 탐색 문제와 결부시켜 생각하면 쉽다. 이동 방향의 순서를 고려하지 않아서 생각보다 시간이 너무 오래 걸려버렸다...

 

 

풀이 코드

import sys
input = sys.stdin.readline

dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]

R, C = map(int, input().split())
visited = [[False]*C for _ in range(R)]
k = int(input())

for _ in range(k) :
  br, bc = map(int, input().split())
  visited[br][bc] = True

sr, sc = map(int, input().split())
visited[sr][sc] = True
so = 0
order = list(map(lambda x : int(x)-1, input().split()))

flg = True
while flg :
  flg = False
  for i in range(4) :
    ao = (so + i) % 4
    ar, ac = sr + dr[order[ao]], sc + dc[order[ao]]
    if -1 < ar < R and -1 < ac < C and not visited[ar][ac] :
      sr, sc, so = ar, ac, ao
      visited[sr][sc] = True
      flg = True
      break
print(sr, sc)

풀이 완료!

'PS > 백준' 카테고리의 다른 글

[백준/1325] 효율적인 해킹 (Python)  (0) 2023.08.30
[백준/9372] 상근이의 여행 (Python)  (1) 2023.08.29
[백준/12904] A와 B (Python)  (0) 2023.08.25
[백준/2253] 점프 (Python)  (0) 2023.08.24
[백준/17071] 숨바꼭질 5 (Python)  (0) 2023.08.23
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.