Algorithm
[Algo] 백준 3010 페그 JAVA
조핑구
2024. 5. 8. 13:34
문제 바로가기 : https://www.acmicpc.net/problem/3010
메모리 : 14176KB
시간 : 120ms
언어 : Java 11
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] two = { { 0, 2 }, { 0, -2 }, { 2, 0 }, { -2, 0 } };
static int[][] one = { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
char[][] map = new char[7][7];
for (int i = 0; i < 7; i++) {
String str = br.readLine();
for (int j = 0; j < 7; j++) {
map[i][j] = str.charAt(j);
}
}
int ans = 0;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (map[i][j] == 'o') {
for (int k = 0; k < 4; k++) {
int x = i + two[k][0];
int y = j + two[k][1];
// 두 칸 다음이 비었다면
if (x >= 0 && y >= 0 && x < 7 && y < 7 && map[x][y] == '.') {
// 사이에 먹을 수 있는 칩이 있는지 검사
if (map[i + one[k][0]][j + one[k][1]] == 'o') {
ans++;
}
}
}
}
}
}
System.out.println(ans);
}
}
풀이
칩-칩-빈칸 순서로 배치되어있어야 이동할 수 있다.
이중for문으로 모든 보드판을 탐색한다. 칩이 있으면 사방탐색으로 두 칸 뒤에 빈 칸이 있는지, 즉 점프할 수 있는지 확인한다.
- 점프할 수 있는 경우 칩과 빈 칸 사이에 다른 칩이 있는지 확인한다.
조건을 만족하는 경우의 수를 센다.