본문 바로가기

알고리즘

파이썬) 로봇 청소기 - BOJ

https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$  둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽

www.acmicpc.net

import sys
input = sys.stdin.readline

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

n, m = map(int, input().split())
r, c, d = map(int, input().split())
for _ in range(n):
    graph.append(list(map(int, input().split())))

graph[r][c] = -1
count = 1
while graph[r][c] != 1:
    # 현재 위치가 1이 아닐때까지
    temp = False
    # 청소했냐 체크
    for _ in range(4):
        # 네방향 체크
        d -= 1
        if d == -1:
            d = 3
        nr = r + dr[d]
        nc = c + dc[d]
        if graph[nr][nc] == 0:
            # 현재 방향 앞이 0이라면
            r = nr
            c = nc
            graph[r][c] = -1
            count += 1
            temp = True
            break
    if not temp:
        # 만약 네방향 중 한곳도 빈칸이 아니라면 후진
        r += dr[d-2]
        c += dc[d-2]

print(count)

 

이번 문제는 구현문제이지만 좀 어려웠다.

로봇이 가야할 방향과 방향 전환에 규칙이 있어 처음엔 그를 잘 신경쓰지 않아 여러번 코드를 수정해야했다.

골드 5 문제였지만 구현에 은근 애를 먹었다.

 

가장 어려웠던 부분은 while문의 탈출 조건이었다.

처음엔 True로 만들어 if문을 통해 while을 빠져나왔지만 어째서인지 무한루프가 생성되는 일이 발생하기도 했기에 직접 탈출조건을 걸어두었다.

 

사실 이 문제는 풀뻔했지만 결국 성공하지 못했다.

내일 다시 한 번 풀어봐야겠다.

'알고리즘' 카테고리의 다른 글

파이썬) 개미 - BOJ  (0) 2023.12.02
파이썬) 미로 만들기 -BOJ  (0) 2023.11.30
파이썬) 시험 감독 -BOJ  (0) 2023.11.28
파이썬) 일곱 난쟁이 - BOJ  (0) 2023.11.23
파이썬) 로봇 프로젝트 - BOJ  (0) 2023.11.22