알고리즘/백준

백준 13901 - (python) 로봇

www.acmicpc.net/problem/13901

 

13901번: 로봇

첫 번째 줄에는 방의 크기 R, C(3 ≤ R, C ≤ 1,000)가 입력된다. 두 번째 줄에는 장애물의 개수 k(0 ≤ k ≤ 1,000)가 입력된다. 다음 k개의 줄에는 각 장애물 위치 br(0 ≤ br ≤ R – 1), bc(0 ≤ bc ≤ C - 1)가

www.acmicpc.net

유형

구현

 

자료구조

set

 

로직

- 무한loop

- 다음 좌표 구하기

- 다음 좌표가 장애물, 방문지점, 범위밖인 경우

- 한 자리에서 4가지 방향을 전부 탐색하면 종료 조건

 

코드

import sys
R, C = map(int, sys.stdin.readline().split())
obsNum = int(input())
matrix = [[0]*C for _ in range(R)]
for _ in range(obsNum):
    r, c = map(int, input().split())
    matrix[r][c] = 1
sr, sc = map(int, input().split())
matrix[sr][sc] = 1
d = list(map(int, input().split()))
for i in range(4):
    d[i] -= 1
dr = [-1,1,0,0]
dc = [0,0,-1,1]
pos = 0
dirSet = set()
answer = []
while( True ):
    dirSet.add(d[pos])
    nr = sr+dr[d[pos]]
    nc = sc+dc[d[pos]]
    if nr<0 or nr>=R or nc<0 or nc>=C or matrix[nr][nc] == 1:
        pos = (pos+1)%4 #다음 방향
        if d[pos] in dirSet:
            answer.append(sr)
            answer.append(sc)
            break
        else:
            continue
    else:
        dirSet = set()
        matrix[nr][nc] = 1
        sr = nr
        sc = nc
print(answer[0], answer[1])