반응형
리뷰
1이 벽이 아니라 청소된 공간으로 이해하여 시간이 꽤 걸렸다.
문제 풀이
- 모든 입력값을 가져오고 방향을 나타낼 리스트를 초기화 해준다.
- 정답을 나타낼 result 변수와 청소가 완료된 상태를 나타낼 배열을 초기화 해준다.
- 현재 위치가 청소되지 않은 상태라면 청소된 상태로 바꾸어 주고 result에 1을 더해준다.
- 움직일 공간이 있는지를 나타낼 변수를 False 상태로 초기화 해준다.
- 방향을 시계 반대 방향으로 90도를 회전하며 해당 방향 앞에 청소 되지 않은 상태인 빈 공간이 있다면 이동한다.
- 4방향 모두 청소 되지 않은 빈 공간이 없다면 후진을 하고, 이동할 수 없다면 루프를 종료한다.
- result 변수에 저장된 값을 출력한다.
참고 사항
방의 가장 북쪽, 가장 남쪽, 가장 서쪽, 가장 동쪽 줄 중 하나 이상에 위치한 모든 칸에는 벽이 있으므로 사실상 맵 밖으로 나가는 일은 없다.
정답 코드
def q14503():
n, m = map(int, input().split())
r, c, d = map(int, input().split())
lst = [list(map(int, input().split())) for _ in range(n)]
dist = [(-1, 0), (0, 1), (1, 0), (0, -1)]
result = 0
cleaned = [[False] * m for _ in range(n)]
while 1:
if not cleaned[r][c]:
cleaned[r][c] = True
result += 1
cleaned_or_moved = False
for _ in range(4):
d = (d + 3) % 4
nr, nc = r + dist[d][0], c + dist[d][1]
if 0 <= nr < n and 0 <= nc < m and not cleaned[nr][nc] and lst[nr][nc] == 0:
r, c = nr, nc
cleaned_or_moved = True
break
if not cleaned_or_moved:
back = (d + 2) % 4
br, bc = r + dist[back][0], c + dist[back][1]
if 0 <= br < n and 0 <= bc < m and lst[br][bc] == 0:
r, c = br, bc
else:
break
print(result)
q14503()
728x90
반응형
'알고리즘 공부 > 파이썬(Python)' 카테고리의 다른 글
백준 3190번 뱀 파이썬 (0) | 2024.07.06 |
---|---|
백준 1475번 방 번호 파이썬 (0) | 2024.07.06 |
백준 10808번 알파벳 개수 파이썬 (0) | 2024.07.06 |
백준 11721번 열 개씩 끊어 출력하기 파이썬 (0) | 2024.07.06 |
백준 1924번 2007년 파이썬 (0) | 2024.07.06 |