• 문제 링크
16197번: 두 동전
N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고,
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static char[][] map;
static int[] dy = {-1, 1, 0, 0};
static int[] dx = {0, 0, -1, 1};
static int min = 11;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
map = new char[n][m];
Node a = null;
Node b = null;
boolean flag = false;
for (int i = 0; i < n; i++) {
String input = br.readLine();
for (int j = 0; j < m; j++) {
map[i][j] = input.charAt(j);
if (map[i][j] == 'o') {
if (flag)
a = new Node(i, j);
else
b = new Node(i, j);
flag = true;
}
}
}
recur(a, b, 0);
bw.write(String.valueOf(min == 11 ? -1 : min));
bw.flush();
}
private static void recur(Node a, Node b, int cnt) {
if (cnt > min || cnt > 10)
return;
for (int i = 0; i < 4; i++) {
int ay = a.y + dy[i];
int ax = a.x + dx[i];
int by = b.y + dy[i];
int bx = b.x + dx[i];
int drop = 0;
if (ay < 0 || ax < 0 || ay >= n || ax >= m)
drop++;
if (by < 0 || bx < 0 || by >= n || bx >= m)
drop++;
if (drop == 2)
continue;
if (drop == 1) {
min = Math.min(min, cnt + 1);
return;
}
if (map[ay][ax] == '#') {
ay = a.y;
ax = a.x;
}
if (map[by][bx] == '#') {
by = b.y;
bx = b.x;
}
recur(new Node(ay, ax), new Node(by, bx), cnt + 1);
}
}
private static class Node {
int y, x;
public Node(int y, int x) {
this.y = y;
this.x = x;
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 6198 옥상 정원 꾸미기 - Data Structure / Java (0) | 2022.09.26 |
---|---|
[백준] 1062 가르침 - Backtracking / Java (0) | 2022.09.25 |
[백준] 1987 알파벳 - Backtracking / Java (0) | 2022.09.23 |
[백준] 16987 계란으로 계란치기 - Backtracking / Java (0) | 2022.09.22 |
[백준] 17136 색종이 붙이기 - Backtracking / Java (0) | 2022.09.21 |
댓글