No Rules Rules

로봇 청소기 (feat. 백준, 14503번) 본문

생활/코테

로봇 청소기 (feat. 백준, 14503번)

개발하는 완두콩 2022. 7. 24. 00:13
728x90
반응형

로봇 청소기
https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어

www.acmicpc.net

반응형
# woohyeon.kim
N, M = map(int, input().split())
x, y, d = map(int, input().split())
arr = []
for _ in range(N):
  arr.append(list(map(int, input().split())))

# 북 동 남 서
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def spin():
  global d
  if d == 0:
    d = 3
  elif d == 1:
    d = 0
  elif d == 2:
    d = 1
  else:
    d = 2

count = 0
while True:
  if arr[x][y] == 0:
    arr[x][y] = 2
    count += 1

  check = False
  for _ in range(len(dx)):
    spin()
    nx, ny = x + dx[d], y + dy[d]
    if 0 <= nx < N and 0 <= ny < M:
      if arr[nx][ny] == 0:
        x, y, check = nx, ny, True
        break;

  if not check:
    nx, ny = x - dx[d], y - dy[d]
    if 0 <= nx < N and 0 <= ny < M:
      if arr[nx][ny] == 1:
        break
      else:
        x, y = nx, ny
    else:
      break;

print(count)
# *&)*@*

동서남북 방향이 트릭이었습니다...

728x90
반응형
Comments