[백준] 13901: 로봇
구현 문제 입니다.
이 문제를 풀기위한 두가지 중요 포인트가 있습니다.
1. 로봇은 사용자가 지정한 방향을 일직선으로 움직인다.
2. 사용자가 지정한 다음 방향이 없다면 맨 처음 방향으로 돌아가서 위의 과정을 반복한다.
문제 풀이 전략
1. 로봇 청소기는 정해진 방향대로 이동한다.
2. 벽을 만나거나 이미 방문한 지점이 나오기 전까지 같은 방향으로 계속 이동하고 방문 처리한다.
3. 로봇 청소기가 한번도 이동하지 않을때까지 반복한다.
import sys
import pdb
input = sys.stdin.readline
n, m = map(int, input().split())
# 장애물 수
k = int(input())
# 이동할 판
lst = [[0]*m for _ in range(n)]
# 장애물에는 1 표시
for i in range(k):
x, y = map(int, input().split())
lst[x][y] = 1
# 로봇의 시작 위치
a, b = map(int, input().split())
lst[a][b] = 1
# 1 상 2 하 3 좌 4 우
move = list(map(int, input().split()))
for i in range(len(move)):
move[i] -= 1
# 1 2 3 4 1은 위 방향, 2은 아래 방향, 3은 왼쪽 방향, 4는 오른쪽 방향을
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
x, y = a, b
# 한칸도 이동하지 않을때 까지
while True:
moved = False
for i in range(len(move)):
# 로봇은 특정 방향에서 벽을 만날때 까지 한 방향으로 이동
while True:
# 이동 할 수 있는 만큼 이동
nx = x + dx[move[i]]
ny = y + dy[move[i]]
# 벽을 만나면 멈춤
if nx < 0 or ny < 0 or nx >= n or ny >= m:
break
# 이미 방문 했으면 멈춤
if lst[nx][ny] == 1:
break
# 그게 아니면 계속 이동하고 이동 처리
if lst[nx][ny] == 0:
moved = True
lst[nx][ny] = 1
x = nx
y = ny
# 한칸도 이동하지 않았으면 종료
if (moved == False):
break
print(x, y)
Author And Source
이 문제에 관하여([백준] 13901: 로봇), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jinii/백준-13901-로봇저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)