오늘아래와 같은 방식으로 문제를 해결하였다. 하나의 테스트케이스만으로 검증하여서 진짜 맞는 코드인지 분간하기가 어렵다.
내가 푼 풀이
n, m = map(int, input().split())
x, y, dir = map(int, input().split())
visited = [[0]*m for _ in range(n)]
field1 = [[0]*m for _ in range(n)]
dirs = [(0, -1), (1, 0), (0, 1), (-1, 0)]
result = 1
visited[y][x] = 1
for i in range(n):
list1 = list(map(int, input().split()))
for j in range(len(list1)):
if list1[j] == 1:
field1[i][j] = 1
def dfs(x, y, d,time):
global result
d -= 1
if d <0:
d = 3
xd = x + dirs[d][0]
yd = y + dirs[d][1]
if xd>=0 and xd <m and yd>=0 and yd<n:
if visited[yd][xd] != 1 and field1[yd][xd] !=1:
result +=1
visited[yd][xd] = 1
time = 0
dfs(xd, yd, d, time)
else :
if time >= 4:
return
else:
dfs(x, y,d, time +1)
else:
if time >= 4:
return
else:
dfs(x, y,d, time +1)
dfs(x, y, dir, 0)
정답
n , m = map(int, input().split())
d = [[0] * m for _ in range(n)]
x, y, direction = map(int, input().split())
d[x][y] = 1
array = []
for i in range(n):
array.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, 1, 0 ,-1]
def turn_left():
global direction
direction -= 1
if direction == -1:
direction = 3
count = 1
turn_time = 0
while True:
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
if d[nx][ny] == 0 and array[nx][ny] == 0:
d[nx][ny] = 1
x = nx
y = ny
count += 1
turn_time = 0
continue
else:
turn_time += 1
if turn_time == 4:
nx = x - dx[direction]
ny = y - dy[direction]
if array[nx][ny] == 0:
x = nx
y = ny
else:
break
turn_time = 0
print(count)
'Today I Learned' 카테고리의 다른 글
kendogrid batch (0) | 2021.12.14 |
---|---|
음료수 얼려먹기 나의 답안 (0) | 2021.12.09 |
kendogrid-isNew() (0) | 2021.12.09 |
깃 크라켓 사용해보기 (0) | 2021.12.05 |
TIL JUNIT, MOCKITO (0) | 2021.12.01 |