본문 바로가기
Algorithm/백준 알고리즘 풀이

[Baekjoon] 16956. 늑대와 양

by newnu 2021. 5. 4.
반응형

# Problem

크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 이동할 수 있다. 두 칸이 인접하다는 것은 두 칸이 변을 공유하는 경우이다.

목장에 울타리를 설치해 늑대가 양이 있는 칸으로 갈 수 없게 하려고 한다. 늑대는 울타리가 있는 칸으로는 이동할 수 없다. 울타리를 설치해보자.

입력

첫째 줄에 목장의 크기 R, C가 주어진다.

둘째 줄부터 R개의 줄에 목장의 상태가 주어진다. '.'는 빈 칸, 'S'는 양, 'W'는 늑대이다.

출력

늑대가 양이 있는 칸으로 갈 수 없게 할 수 있다면 첫째 줄에 1을 출력하고, 둘째 줄부터 R개의 줄에 목장의 상태를 출력한다. 울타리는 'D'로 출력한다. 울타리를 어떻게 설치해도 늑대가 양이 있는 칸으로 갈 수 있다면 첫째 줄에 0을 출력한다.

제한

  • 1 ≤ R, C ≤ 500


 

# Solution 

R,C = map(int,input().split())
M = [list(input()) for i in range(R)]

dx = [-1,1,0,0]
dy = [0,0,-1,1]
ck = False

for i in range(R):
    for j in range(C):
        if M[i][j] =="W":
            for w in range(4):
                ii,jj = i+dx[w], j+dy[w]
                if ii<0 or ii==R or jj<0 or jj ==C:
                    continue
                if M[ii][jj] =="S":
                    ck = True
if ck: print(0)

else:
    print(1)
    for i in range(R):
        for j in range(C):
            if M[i][j] not in 'SW':
                M[i][j]='D'

for i in M: print(''.join(i))

W인 점에 대해서 상하좌우 탐색 

-> S가 있다면 인접하므로 울타리 세울 수 없다 ck=True -> print(0)

W와 S가 인접한 곳이 하나도 없다면 

-> S ,W 제외 모든 점은 D로 바꾸기 

반응형

'Algorithm > 백준 알고리즘 풀이' 카테고리의 다른 글

[Baekjoon] 16768. Mooyo Mooyo  (0) 2021.05.05
❗️[Baekjoon] 14620. 꽃길  (0) 2021.05.05
[Baekjoon] 17413. 단어 뒤집기 2  (0) 2021.05.04
[Baekjoon] 16675. 두 개의 손  (0) 2021.05.04
[Baekjoon] 9037. The candy war  (0) 2021.05.04