[BOJ] 백준 14503 - 로봇 청소기
👩🏻💻 문제
👩🏻💻 정답 코드
n, m = map(int, input().split())
r, c, d = map(int, input().split())
room = [[]*m for _ in range(n)]
for i in range(n):
s = list(map(int, input().split()))
for j in range(m):
room[i].append(s[j])
count = 0
result = 0
while True:
if room[r][c] == 0:
result = result + 1
room[r][c] = 2
newR, newC = r, c
if d == 0: newC -= 1
elif d == 1: newR -= 1
elif d == 2: newC += 1
else: newR += 1
d = (d+3)%4
if room[newR][newC] == 0:
r, c = newR, newC
count = 0
else:
count += 1
if count == 4:
if d == 0: newR += 2
elif d == 1: newC -= 2
elif d == 2: newR -= 2
else: newC += 2
if room[newR][newC] == 1:
break
else:
r, c = newR, newC
count = 0
print(result)
처음에는 d
바꾸는 문장 아래 if문
에서 0일 경우 (왼쪽이 청소되지 않은 경우)에서 result
을 하나 늘렸는데 출력 예시는 잘 나오는데 자꾸 틀렸다고 해서 머리 싸매고 문제를 다시 잘 읽고 프로세스를 생각해 보니까 result
를 일단 늘려야 하는 거구나 싶어서 순서를 바꿨다. (문제에 제일 첫 단계가 1. 현재 위치를 청소한다.
라고 되어 있잖아요...)
다른 분들 코드를 좀 보니까 나처럼 d의 네 가지 경우를 다 if문으로 따지는 게 아니라 dx = [-1, 0, 1, 0]
, dy = [0, 1, 0, -1]
으로 해놓고 우아하게 식을 쓰더라...ㅎ
아무튼 이 문제는 지문이 좀 한 번에 이해하기 헷갈려서 오래 걸렸던 문제다... ㅠ ㅠ
Author And Source
이 문제에 관하여([BOJ] 백준 14503 - 로봇 청소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dazzlynn/BOJ-백준-14503-로봇-청소기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)