본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 16956 늑대와 양 / python

https://www.acmicpc.net/problem/16956

 

16956번: 늑대와 양

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

www.acmicpc.net

 

R, C = map(int, input().split())

MAP = [list(input()) for _ in range(R)]
dx, dy = [-1, 0, 1, 0], [0, -1, 0, 1]

ck = False

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

if ck:
    print(0)
else:
    print(1)
    for i in range(R):
        for j in range(C):
            if MAP[i][j] not in 'SW':
                MAP[i][j] = 'D'
    for i in MAP:
        print(''.join(i))