본문 바로가기
알고리즘

[알고리즘] 로봇 청소기

by keel_im 2021. 3. 7.
반응형

포인트

1. 로봇 청소기 문제, 구현 순서에 따라서 해결하면 되는 문제 입니다. 

🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다. 

python

import sys

sys.stdin = open('input.txt')

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

n, m = map(int, input().split())
x, y, dir = map(int, input().split())

data = [list(map(int, input().split())) for _ in range(n)]


def turn(d: int) -> int:
	"""
	방향을 바꿔주는 함수
	:param d:int
	:return:int
	"""
	if d == 0:
		return 3
	else:
		return d - 1


while True:
	data[x][y] = 2
	for i in range(4):
		ndir = turn(dir)
		nx = x + dx[ndir]
		ny = y + dy[ndir]
		
		if data[nx][ny] == 0:
			x, y, dir = nx, ny, ndir
			break
		if not (0 <= nx < n and 0 <= ny < m):
			continue
		
		if data[nx][ny] == 1 or data[nx][ny] == 2:
			dir = ndir
	
	else:
		nx = x - dx[dir]
		ny = y - dy[dir]
		
		if not (0 <= nx < n and 0 <= ny < m) or data[nx][ny] == 1:
			break
		else:
			x, y = nx, ny

result = 0
for row in range(n):
	result += data[row].count(2)
print(result)
반응형

'알고리즘' 카테고리의 다른 글

[알고리즘] Jewels and Stones  (0) 2021.03.08
[알고리즘] Top K Frequent Elements  (0) 2021.03.08
[알고리즘] 치킨 배달  (0) 2021.03.07
[알고리즘] Permutations  (0) 2021.03.04
[알고리즘] missing Number  (0) 2021.03.04

댓글