문제 출처 : https://www.acmicpc.net/problem/14503
🔥 작성코드
N, M = map(int, input().split())
si, sj, d = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
# 입력받은 d는 시계방향 (북, 동, 남, 서 => 북, 서, 남, 동)
if d%2:
d = (d+2)%4
# 반시계 방향으로 북, 서, 남, 동
di = [-1, 0, 1, 0]
dj = [0, -1, 0, 1]
# 시작지점 청소
arr[si][sj] = 2
cnt = 1
flag = 0
while True:
if flag == -1:
break
# 현재 방향(d)에서 왼쪽으로 돌며 확인
for k in range(d+1, d+5):
c = k%4
ni = si + di[c]
nj = sj + dj[c]
# 청소할 영역이 있으면 청소
if 1 <= ni < N-1 and 1 <= nj < M-1 and arr[ni][nj] == 0:
arr[ni][nj] = 2
si = ni
sj = nj
d = c
cnt += 1
break
# 4방향 모두 청소할 구역이 없다면 뒤로가거나 종료
else:
ni = si - di[d]
nj = sj - dj[d]
if ni < 1 or ni >= N-1 or nj < 1 or nj >= M-1 or arr[ni][nj] == 1:
flag = -1
else:
si = ni
sj = nj
print(cnt)
⭕ 해설
- 입력받은 방향을 북, 동, 남, 서에서 북, 서, 남, 동으로 바꾸어줍니다.
- 시작지점을 청소합니다.
- while문을 돌면서 해당 방향에서 왼쪽부터 청소할 영역이 있는지 확인합니다.
- 청소할 곳이 있다면 방향을 돌리고 이동하고 청소합니다.
- 청소할 곳이 없다면 한 칸 뒤로 갑니다. (방향은 그대로)
- 뒤로 갈 곳이 없다면 종료합니다. (벽으로 막혀있다면 flag를 -1로 바꾸어 종료)
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준 BOJ] 1325 효율적인 해킹 (python) (0) | 2022.12.24 |
---|---|
[백준 BOJ] 13460 구슬 탈출 2 (python) (0) | 2022.04.28 |
[백준 BOJ] 17070 파이프 옮기기 1 (python) (0) | 2022.03.14 |
[백준 BOJ] 10971 외판원 순회2 (python) (0) | 2022.03.09 |
[백준 BOJ] 15657 N과 M(8) (python) (0) | 2022.03.04 |