https://www.acmicpc.net/problem/14503
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 |