[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]으로 해놓고 우아하게 식을 쓰더라...ㅎ

아무튼 이 문제는 지문이 좀 한 번에 이해하기 헷갈려서 오래 걸렸던 문제다... ㅠ ㅠ

좋은 웹페이지 즐겨찾기