티스토리 뷰

알고리즘

BOJ16956 늑대와 양 java

kkoon9 2022. 2. 16. 09:57

문제

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

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

입력

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

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

출력

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

제한

  • 1 ≤ R, C ≤ 500

핵심 포인트

  • 울타리는 어떻게 설치하든 상관없다.
  • 즉, 상하좌우로 늑대와 양이 붙어있는지만 파악하면 된다.
  • 늑대와 양이 붙어있으면 0을 출력한다.
  • 늑대와 양이 붙어있지 않으면 1을 출력한 뒤 목장의 .을 D로 replace 하여 목장을 출력해줬다.
import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int R = Integer.valueOf(st.nextToken());
        int C = Integer.valueOf(st.nextToken());
        String[] pastures = new String[R];

        char[][] pasturesCharArr = new char[R][C];
        int answer = 1;
        for(int i = 0;i<R;i++) {
            String pasture = br.readLine();
            if(pasture.contains("SW") || pasture.contains("WS")) {
                answer = 0;
            }
            pastures[i] = pasture;
            pasturesCharArr[i] = pasture.toCharArray();
        }

        for(int i = 0;i<C;i++) {
            StringBuilder sb = new StringBuilder();
            for(int j =0;j<R;j++) {
                sb.append(pasturesCharArr[j][i]);
            }
            String pasture = sb.toString();
            if(pasture.contains("SW") || pasture.contains("WS")) {
                answer = 0;
            }
        }
        System.out.println(answer);
        if(answer == 1) {
            for(String pasture : pastures) {
                System.out.println(pasture.replaceAll("\\\\.","D"));
            }
        }
    }
}

'알고리즘' 카테고리의 다른 글

BOJ1080 행렬 java  (0) 2022.02.17
BOJ17413 단어 뒤집기 2 java  (0) 2022.02.16
BOJ16675 두 개의 손 java  (0) 2022.02.16
BOJ14620 꽃길 java  (0) 2022.02.14
BOJ10539 수빈이와 수열 java  (0) 2022.02.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함