문제 링크
https://www.acmicpc.net/problem/20165
문제 풀이
기본적인 시뮬레이션 문제이다
n,m,r = map(int, input().split())
arr=[list(map(int, input().split()))for _ in range(n)]
visited = [[True]*m for _ in range(n)]
dir = {'E':(0,1),'W':(0,-1),'S':(1,0),'N':(-1,0)}
answer = 0
입력값을 받아준다
나의 풀이의 경우에는 visited배열을 두어서, 넘어지면 False로 해두었다
for _ in range(r):
X,Y,D = map(str, input().split())
X = int(X)-1
Y = int(Y)-1
xx,yy = map(int, input().split())
xx-=1
yy-=1
cnt = 0
if visited[X][Y]:
domino(X,Y,D,arr[X][Y])
visited[xx][yy]=True
answer+=cnt
공격값과 방어값을 넣어주고,
현재 공격값에 위치한 도미노가 True상태이면 함수안으로 들어가게 해줬다
def domino(x,y,d,num):
global cnt
if visited[x][y]:
visited[x][y] = False
cnt+=1
for dis in range(num-1):
x += dir[d][0]
y += dir[d][1]
if not (0<=x<n and 0<=y<m):
continue
if visited[x][y]:
domino(x,y,d,arr[x][y])
도미노 함수에서
현재 값이 살아있다면 False로 바꿔주고 점수 +1해줌
이후에 도미노를 쓰러트리는 For문으로 들어가서
if vistied[x][y]가 True일때만 반복할수있도록 했다.
최종 코드
n,m,r = map(int, input().split())
arr=[list(map(int, input().split()))for _ in range(n)]
visited = [[True]*m for _ in range(n)]
dir = {'E':(0,1),'W':(0,-1),'S':(1,0),'N':(-1,0)}
answer = 0
def domino(x,y,d,num):
global cnt
if visited[x][y]:
visited[x][y] = False
cnt+=1
for dis in range(num-1):
x += dir[d][0]
y += dir[d][1]
if not (0<=x<n and 0<=y<m):
continue
if visited[x][y]:
domino(x,y,d,arr[x][y])
for _ in range(r):
X,Y,D = map(str, input().split())
X = int(X)-1
Y = int(Y)-1
xx,yy = map(int, input().split())
xx-=1
yy-=1
cnt = 0
if visited[X][Y]:
domino(X,Y,D,arr[X][Y])
visited[xx][yy]=True
answer+=cnt
print(answer)
for i in range(n):
for j in range(m):
if visited[i][j]:
visited[i][j] = "S"
else:
visited[i][j] ="F"
print(*visited[i])
'💡 Codeing Test > 백준' 카테고리의 다른 글
백준 14719) 빗물 (python) (0) | 2024.03.14 |
---|---|
백준 2003) 수들의 합2 (python) (0) | 2024.03.11 |
백준 22862) 가장 긴 짝수 연속한 부분 수열 (large) (1) | 2024.03.08 |
백준 5525) IOIOI (python) (0) | 2024.03.07 |
백준 1495) 기타리스트 (python) (0) | 2024.03.05 |