https://www.acmicpc.net/problem/14503
접근
문제에서 요구하는 대로 코드를 단순하게 구현하였다.
현재 위치와 방향을 받아 현재 위치를 청소 완료되었다고 표시하고, 현재 방향을 기준으로 4방향을 탐색하여 청소 안된 곳이 있을 경우 이동, 없을 경우 후진, 마지막으로 이동한 위치와 방향을 리턴하는 clean 함수를 작성하여 문제를 해결하였다.
코드
N, M = map(int, input().split())
r, c, d = map(int, input().split())
matrix = []
for _ in range(N):
matrix.append(list(map(int, input().split())))
rc = [-1, 0, 1, 0]
cc = [0, 1, 0, -1]
def clean(r, c, d, cnt):
# 현재 위치가 청소되어있지 않다면 청소
if matrix[r][c] == 0:
cnt += 1
matrix[r][c] = 2
for i in range(1, 5):
# 현재 방향을 기준으로 왼쪽 방향 순서대로 탐색하여 청소되지 않은 공간이 있을 경우 이동
di = (d - i) % 4
nr, nc = r + rc[di], c + cc[di]
if matrix[nr][nc] == 0:
return 1, cnt, nr, nc, di
# 4방향 모두 청소가 완료되었을 경우, 새로 이동하는 위치는 후진
nr, nc = r + rc[(d + 2) % 4], c + cc[(d + 2) % 4]
if matrix[nr][nc] == 1:
# 후진 시, 뒤가 벽일 경우 작동 중지를 뜻하는 0 리턴
return 0, cnt, r, c, d
else:
# 후진 시, 뒤가 벽이 아닐 경우 후진한 위치 및 방향을 리턴
return 1, cnt, nr, nc, d
flag = 1
cnt = 0
while flag:
# clean 함수에서 작동 중지를 뜻하는 flag = 0 이 리턴될 때 까지 계속 반복
flag, cnt, r, c, d = clean(r, c, d, cnt)
print(cnt)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 15683번: 감시 (Python) (0) | 2022.02.21 |
---|---|
백준 14890번: 경사로 (Python) (0) | 2022.02.19 |
백준 14502번: 연구소 (Python) (0) | 2022.02.19 |
백준 14501번: 퇴사 (Python) (0) | 2022.02.19 |
백준 14500번: 테트로미노 (Python) (0) | 2022.02.06 |
최근댓글