728x90
반응형
<문제 링크>
https://www.acmicpc.net/problem/14503
<풀이>
문제에서 제공하는 조건에 맞게 구현하면 되는 문제이다.
다만, 2번 조건에는 a, b, c, d가 있는데
a, b 조건이 우선으로 주어졌지만, c와 d를 먼저 체크한 다음에 a와 b로 넘어가는게 맞다고 생각해
코드를 구현할 때 2-c, 2-d를 먼저 수행했다.
<코드>
board[][]: 맵
count: 청소한 칸 수
r, c: 현재 좌표 (r, c)
import sys
if __name__ == "__main__":
N, M = map(int, sys.stdin.readline().split())
board = []
count = 0 # 청소한 칸
r, c, d = map(int, sys.stdin.readline().split()) # (r, c), d = [0: 북, 1: 동, 2: 남, 3: 서]
for i in range(N):
board.append(list(map(int, sys.stdin.readline().rstrip().split())))
while True:
# 1
if board[r][c] == 0:
board[r][c] = -1
count += 1
# 2-c, 2-d
if board[r-1][c] != 0 and board[r+1][c] != 0 and board[r][c-1] != 0 and board[r][c+1] != 0:
if d == 0:
if board[r+1][c] == 1:
break
else:
r += 1
elif d == 1:
if board[r][c-1] == 1:
break
else:
c -= 1
elif d == 2:
if board[r-1][c] == 1:
break
else:
r -= 1
elif d == 3:
if board[r][c+1] == 1:
break
else:
c += 1
continue
# 2-a, 2-b
if d == 0:
if board[r][c-1] == 0:
c -= 1
d = 3
elif d == 1:
if board[r-1][c] == 0:
r -= 1
d = 0
elif d == 2:
if board[r][c+1] == 0:
c += 1
d = 1
elif d == 3:
if board[r+1][c] == 0:
r += 1
d = 2
print(count)
728x90
반응형
'~2023' 카테고리의 다른 글
[Jupyter/Issue] 주피터 노트북 "Bad file descriptor" (0) | 2021.09.17 |
---|---|
[Markdown] 마크다운 이미지 삽입 및 이미지 크기 조절 (0) | 2021.09.17 |
[Python] 백준 11051번 문제, 이항 계수 2 (0) | 2021.08.30 |
[Python] 백준 14502번 문제, 연구소 (0) | 2021.08.23 |
[Python] 백준 1932번 문제, 정수 삼각형 (0) | 2021.08.23 |