백준_구현_로봇청소기_14503_파이썬

석준·2022년 8월 18일
0

백준_문제풀이

목록 보기
16/30
post-thumbnail

✅문제 요약

  1. nxm 영역
  2. 현재위치 청소
  3. 현재위치 방향 기준으로 왼쪽방향부터 차례대로 탐색
  4. 청소하지 않은 공간이 있다면 그 방향으로 회전한 다음 한칸 전진하고 다시 1번
  5. 네 방향 모두 청소가 되어있거나 벽인 경우, 바라보는 방향 유지한채 한칸 후진하고 2번
  6. 뒤로 가지 못한다면 작동 멈춤
  7. 이미 청소되어 있는 칸은 청소하지 못함, 벽통과 못함

✅문제 풀이

구현은 진짜 시키는 대로만 만들면 풀 수 있다.
문제에서 요구하는 2차원 배열 방향성을 갖고 탐색하기 + 조건절 을 만들면 바로 풀린다

N, M = map(int, input().split())
r, c, idx = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]

clean = 0       # 청소한 칸 개수

dr = [-1, 0, 1, 0]  # 북 동 남 서
dc = [0, 1, 0, -1]
# 벽 1 빈칸 0

while True:

    if arr[r][c] != 2:
        arr[r][c] = 2       # 현재위치 청소
        clean += 1          # 청소 + 1

    cnt = 0     # 현재위치에서 탐색 횟수
    while cnt < 4:
        cnt += 1
        idx = (idx-1)%4
        sr, sc = r + dr[idx], c + dc[idx]

        if 1 <= sr < N-1 and 1 <= sc < M-1 and arr[sr][sc] == 0:
            r, c = sr, sc
            break

    else:
        lr, lc = r - dr[idx], c - dc[idx]
        if arr[lr][lc] == 1:
            break
        r, c = lr, lc


print(clean)
profile
파이썬 서버 개발자 지망생

0개의 댓글