💡 Codeing Test/백준

백준 20165) 인내의 도미노 장인 호석

밈98 2024. 8. 24. 21:05
문제 링크

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])