코딩테스트/Java

[JAVA] 백준 양

SK_MOUSE 2021. 12. 14. 17:13

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

 

dfs 탐색을 통해서 네방향으로 나아간다.

grid에 양과 늑대를 반영하지 않고 count값만 저장하여 최종결과를 도출할 때에 활용했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int R, C;
    static int wolf = 0, sheep = 0;
    static int resultWolf = 0, resultSheep = 0;
    static boolean visited[][];
    static char[][] grid;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        R = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        visited = new boolean[R][C];
        grid = new char[R][C];
        for (int i = 0; i < R; i++) {
            String line = br.readLine();
            for (int j = 0; j < line.length(); j++) {
                grid[i][j] = line.charAt(j);
            }
        }
        for (int i = 0; i < R; i++) {
            for (int j = 0; j < C; j++) {
                wolf = 0;
                sheep = 0;//양/늑대 초기화
                if (!visited[i][j]) dfs(i, j);
                if (sheep > wolf) wolf = 0;
                else sheep = 0;

                resultSheep += sheep;
                resultWolf += wolf;
            }
        }

        System.out.println(resultSheep + " " + resultWolf);
    }

    static int[] dr = {0, 1, 0, -1};//우상좌하
    static int[] dc = {1, 0, -1, 0};

    static void dfs(int r, int c) {//영역순회
        visited[r][c] = true;

        if (grid[r][c] == 'o') ++sheep;
        if (grid[r][c] == 'v') ++wolf;

        for (int d = 0; d < 4; d++) {
            int newR = r + dr[d];
            int newC = c + dc[d];
            if (boundaryCheck(newR, newC) && !visited[newR][newC] && grid[newR][newC] != '#') {
                dfs(newR, newC);
            }
        }
    }

    static boolean boundaryCheck(int r, int c) {
        return (r < R && c < C && r >= 0 && c >= 0);
    }
}

 

반응형

'코딩테스트 > Java' 카테고리의 다른 글

[JAVA] 백준 구간 합 구하기 5  (0) 2021.12.21
[JAVA] 백준 돌다리  (0) 2021.12.21
[JAVA] 백준 동전1  (0) 2021.11.18
[JAVA] 프로그래머스 폰켓몬  (0) 2021.11.05
[JAVA] 프로그래머스 소수 만들기  (0) 2021.11.05