14503. 로봇청소기

sen·2021년 6월 25일
0

BOJ

목록 보기
28/38
post-thumbnail

문제

백준 14503번 로봇청소기


풀이

코드 다 짜놓고 입력값을 잘못 이해하고 있어서 쓸데없이 오래걸렸다ㅡㅡ

오류1 - 입력값 r, c가 1부터 시작하는 줄 알고 배열에 적용한다고 -1을 해줬었다.
오류2 - directionr, c를 반대로 넣고 있었다.....

오류 잡는다고 1시간 걸렸는데 어이없다 진짜;;

방향에 따라 탐색을 시작하는 좌표 순서가 달라지기 때문에 아예 딕셔너리에 4가지 방향에 따른 값을 0:[(r증감, c증감, 회전 후 방향), ... (r증감, c증감, 회전 후 방향)], ... 와 같이 저장해놨다.

그 후 문제에서 명세한 순서대로 코드를 구현한다.

n, m = map(int, input().split())
r, c, d = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]

direction = {0:[(0, -1, 3), (1, 0, 2), (0, 1, 1), (-1, 0, 0)], \
            1:[(-1, 0, 0), (0, -1, 3), (1, 0, 2), (0, 1, 1)], \
            2:[(0, 1, 1), (-1, 0, 0), (0, -1, 3), (1, 0, 2)], \
            3:[(1, 0, 2), (0, 1, 1), (-1, 0, 0), (0, -1, 3)]}
cnt = 0
while True:
    if board[r][c] == 0: 
        cnt += 1
        board[r][c] = -1
    for nxt in direction[d]:
        rr, cc, d = r+nxt[0], c+nxt[1], nxt[2]
        if board[rr][cc] == 0:
            r, c = rr, cc
            break
    else:
        br, bc = r+direction[d][1][0], c+direction[d][1][1]
        if board[br][bc] == 1: break
        else: r, c = br, bc
print(cnt)

부족한 점

구현 문제는 난이도와 무관하게 항상 시간이 오래걸리고 있다. 특히 문제에서 요구하는 바와 입력값을 명확히 이해할 필요가 있다.

profile
공부 아카이브

0개의 댓글