[백준] 3010: 페그 - JAVA

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

풀이

구현문제.

o가 o 하나를 건너뛰어서 .에 도착하면 정답 개수 하나를 늘린다.

o보다 .이 더 적을거라고 생각해서 .을 저장하였다.

.주위를 사방탐색하여 o이면 한칸 더 가도 o일 때 정답 개수를 늘렸다.


메모리: 14240KB

시간: 120ms

언어: Java 11

코드

import java.io.*;
import java.util.*;

public class Main {

    static class Point {
        int r;
        int c;

        public Point(int r, int c) {
            this.r = r;
            this.c = c;
        }
    }

    static int[][] vector = { { -1, 0 }, { 1, 0 }, { 0, 1 }, { 0, -1 } };

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

        char[][] board = new char[7][7];
        Queue<Point> queue = new LinkedList<>();
        for (int i = 0; i < 7; i++) {
            String line = br.readLine();
            for (int j = 0; j < 7; j++) {
                board[i][j] = line.charAt(j);
                if (board[i][j] == '.') {
                    queue.add(new Point(i, j));
                }
            }
        }

        int ans = 0;
        while (!queue.isEmpty()) {
            Point p = queue.poll();

            for (int i = 0; i < 4; i++) {
                int nr = p.r + vector[i][0];
                int nc = p.c + vector[i][1];

                if (nr < 0 || nc < 0 || nr >= 7 || nc >= 7) {
                    continue;
                }

                if (board[nr][nc] == 'o') {
                    nr += vector[i][0];
                    nc += vector[i][1];

                    if (nr < 0 || nc < 0 || nr >= 7 || nc >= 7) {
                        continue;
                    }

                    if (board[nr][nc] == 'o') {
                        ans++;
                    }
                }
            }
        }

        System.out.println(ans);
    }

}