반응형
16956번: 늑대와 양
크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게
www.acmicpc.net
문제
크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 이동할 수 있다. 두 칸이 인접하다는 것은 두 칸이 변을 공유하는 경우이다.
목장에 울타리를 설치해 늑대가 양이 있는 칸으로 갈 수 없게 하려고 한다. 늑대는 울타리가 있는 칸으로는 이동할 수 없다. 울타리를 설치해보자.
입력
첫째 줄에 목장의 크기 R, C가 주어진다.
둘째 줄부터 R개의 줄에 목장의 상태가 주어진다. '.'는 빈 칸, 'S'는 양, 'W'는 늑대이다.
출력
늑대가 양이 있는 칸으로 갈 수 없게 할 수 있다면 첫째 줄에 1을 출력하고, 둘째 줄부터 R개의 줄에 목장의 상태를 출력한다. 울타리는 'D'로 출력한다. 울타리를 어떻게 설치해도 늑대가 양이 있는 칸으로 갈 수 있다면 첫째 줄에 0을 출력한다.
제한
- 1 ≤ R, C ≤ 500
예제 입력 1![]() |
예제 출력 1![]() |
예제 입력 21 2
SW |
예제 출력 20
|
예제 입력 3![]() |
예제 출력 3![]() |
풀이
이 문제는 울타리를 적게 설치해야 한다는 조건이 없다.
따라서 모든 . 을 D로 바꿔주면 된다.
양과 늑대가 딱 붙어있는 경우만 0을 출력한다.
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
board = [list(input().replace('.','D').rstrip()) for _ in range(n)]
move = [(0,1),(1,0),(0,-1),(-1,0)]
for i in range(n):
for j in range(m):
if board[i][j] == 'S':
for dx,dy in move:
nx = dx+i; ny= dy+j
if n>nx>=0 and m>ny>=0 and board[nx][ny] == 'W':
print(0)
sys.exit()
print(1)
for i in board:
print(*i, sep="")
반응형
'알고리즘 연습 > DFS와 BFS' 카테고리의 다른 글
[🥈2 / 백준 18352 / 파이썬] 특정 거리의 도시 찾기 (0) | 2022.03.02 |
---|---|
[🥈2 / 백준 2210 / 파이썬] 숫자판 점프 (0) | 2022.02.25 |
[🥈1 / 백준 1926 / 파이썬] 그림 (0) | 2022.02.07 |
[🥇4 / 백준 1600 / 파이썬] 말이 되고픈 원숭이 (0) | 2022.01.23 |
[🥇5 / 백준 13023 / 파이썬] ABCDE (0) | 2022.01.23 |