문제 링크 : https://www.acmicpc.net/problem/14503
구현 + 재귀 문제. 이렇게 스텝을 친절하게 알려주는 문제는 그냥 스텝 따라 코드 짜서 정답 나오면 좋은데 생각을 좀 해야되는 문제였다.
스텝 1이 "현재 위치를 청소한다" 라서 재귀의 시작을 청소로 구현했었는데, 후진하고 2번으로 다시 돌아가는 로직을 다시 구현하기가 까다로웠다. "현재 위치를 아직 청소하지 않았으면" 이라는 나만의 조건을 추가하고, 2번으로 돌아가는게 아니라 아예 재귀를 수행하도록 해줬더니 잘 풀렸던것 같다.
import sys N, M = map(int, sys.stdin.readline().split()) r, c, d = map(int, sys.stdin.readline().split()) answer = 0 direction = [(-1,0), (0,1), (1,0), (0,-1)] # 북 동 남 서 clean = [[False] * M for _ in range(N)] graph = [] for _ in range(N): graph.append(list(map(int, sys.stdin.readline().split()))) def robotCleaner(x, y, d): #print('x y',x,y) if not clean[x][y]: clean[x][y] = True global answer answer += 1 dCheck = 0 for _ in range(4): nextD = d - 1 if nextD == -5: nextD = 3 nx = x + direction[nextD][0] ny = y + direction[nextD][1] # 2-a if 0 <= nx < N and 0 <= ny < M and not clean[nx][ny] and graph[nx][ny] == 0: robotCleaner(nx, ny, nextD) return dCheck += 1 d = nextD if dCheck == 4: bx = x - direction[nextD][0] by = y - direction[nextD][1] if not graph[bx][by] == 1: robotCleaner(bx,by,nextD) else: return robotCleaner(r,c,d) print(answer)