728x90
코드는 여기. 해설 및 잡설은 아래로..
N, M = map(int, input().split())
r, c, dir = map(int, input().split())
grid = []
for i in range(N):
grid.append(list(map(int, input().split())))
# if 청소 : 2
start = [r, c, dir]
stack = [start]
answer = 0
dir = [[-1, 0], [0, 1], [1, 0], [0, -1]]
def next_dir(grid, y, x, d):
ny, nx = 0, 0
# dir = [[-1, 0], [0, 1], [1, 0], [0, -1]]
for i in range(4):
next_dir = (d+3)%4
dy, dx = dir[next_dir]
ny, nx = y+dy, x+dx
if grid[ny][nx] == 0:
return [ny, nx, next_dir]
d = next_dir
return [0]
while stack:
answer += 1
cur = stack[0]
stack = []
y, x, d = cur[0], cur[1], cur[2]
# print(y, x)
grid[y][x] = 2 #현재 칸 청소
while True:
stack.append(next_dir(grid, y, x, d))#다음 이동할 구간 확인. 있으면 밖으로
if len(stack[0]) == 3:
break
else : #없으면
stack = []
tmp_dir = (d+2)%4
dy, dx = dir[tmp_dir]
ny = y + dy
nx = x + dx #뒤로
if grid[ny][nx] == 1:
break
elif grid[ny][nx] == 2:
y, x = ny, nx
else:
stack.append([ny, nx, d])
break
print(answer)
- 문제를 정확히 이해하고 풀면 된다.
- 헷갈렸던 부분은, 뒤로 다시 갈 때 방향이 어떻게 되는지?가 조금 헷갈렸다.
- 뒤로 한칸 간 뒤 다시 처음 규칙으로 주변을 탐색하고 주변에 갈 곳이 없으면 그대로 또 뒤로 한칸 가야함.
- 나는 풀면서 조금씩 조건을 추가하는 방식으로 풀었는데, 솔직히 문제를 제대로 완전히 이해하지 않고 풀어서 조금 헤맸다.
****** 시뮬레이션 문제 풀때 팁 *******
- 문제를 먼저 정확히 이해하고 풀 것. 풀면서 수정하는게 더 복잡하고 어렵고 수정하기 힘들다
+ 잡담 ) 두시간넘게 자꾸 틀려서 처음부터 새로 짯는데, 생각해보니 디버깅과정에서 넣은 print때문인거같아서 뺏더니 답이 나왔다 ,, 하....
728x90
'코딩테스트 > 삼성 기출' 카테고리의 다른 글
| 백준 20061 모노미노도미노 2 파이썬 풀이, 코드 (삼성 기출, 시뮬레이션) (0) | 2022.10.13 |
|---|---|
| 삼성기출, 백준 23288 주사위 굴리기2 파이썬 코드/풀이 (0) | 2022.10.09 |
| 백준 14891 톱니바퀴 코드, 해설(파이썬)/ 삼성기출, 실버1 구현문제 (0) | 2022.03.03 |
| 백준 17406번 배열 돌리기 4 파이썬 해설/코드, 구현 문제, 삼성 A형 기출, 골드4 (0) | 2022.01.08 |
| 백준 17136 색종이 붙이기 풀이, 코드 (파이썬) 구현문제 / 삼성 A형 기출 (0) | 2022.01.05 |