[ BOJ / Python ] 13901번 로봇

황승환·2022년 6월 23일
0

Python

목록 보기
334/498


이번 문제는 방문 처리를 진행하며 주어진 순서대로 계속해서 로봇을 움직이도록 하는 문제였다. 처음에는 문제를 제대로 읽지 않아, 주어진 방향 순서로만 이동하고 프로그램을 종료하도록 작성하여 오답 처리를 받았다. 문제를 다시 읽어보니 더 이상 움직일 수 없을 때까지 반복해야 하기 때문에 무한 루프 안에서 해결해야 했다. 종료 조건에 대해 생각하다가, 4 방향을 모두 확인했을 때, 더 이상 갈 수 있는 방향이 없을 경우 종료하도록 하였다.

Code

r, c = map(int, input().split())
k = int(input())
grid = [['*' for _ in range(c)] for _ in range(r)]
for _ in range(k):
    a, b = map(int, input().split())
    grid[a][b] = 'x'
robot = list(map(int, input().split()))
grid[robot[0]][robot[1]] = '0'
commands = list(map(int, input().split()))
for i in range(len(commands)):
    commands[i] -= 1
dy, dx=[-1, 1, 0, 0], [0, 0, -1, 1]
def move(d):
    global robot
    while True:
        ny, nx = robot[0] + dy[d], robot[1] + dx[d]
        if 0 <= ny < r and 0 <= nx < c and grid[ny][nx] == '*':
            robot = [ny, nx]
            grid[ny][nx] = '0'
        else:
            break
idx = 0
while True:
    move(commands[idx])
    idx = (idx + 1) % 4
    cnt = 0
    for i in range(4):
        ny, nx = robot[0] + dy[i], robot[1] + dx[i]
        if 0 <= ny < r and 0 <= nx < c and grid[ny][nx] == '*':
            cnt += 1
    if not cnt:
        break
print(*robot)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글