π‘ Info
λ΄μ©
NxN ν¬κΈ°μ 볡λκ° μλ€. 볡λλ 1x1 ν¬κΈ°μ μΉΈμΌλ‘ λλμ΄μ§λ©°, νΉμ ν μμΉμλ μ μλ, νμ, νΉμ μ₯μ λ¬Όμ΄ μμΉν μ μλ€. νμ¬ λͺ λͺ μ νμλ€μ μμ μκ°μ λͺ°λ 볡λλ‘ λΉ μ Έλμλλ°, 볡λλ‘ λΉ μ Έλμ¨ νμλ€μ μ μλμ κ°μμ λ€ν€μ§ μλ κ²μ΄ λͺ©νμ΄λ€.
κ° μ μλλ€μ μμ μ μμΉμμ μ, ν, μ’, μ° 4κ°μ§ λ°©ν₯μΌλ‘ κ°μλ₯Ό μ§ννλ€. λ¨, 볡λμ μ₯μ λ¬Όμ΄ μμΉν κ²½μ°, μ μλμ μ₯μ λ¬Ό λ€νΈμ μ¨μ΄ μλ νμλ€μ λ³Ό μ μλ€. λν μ μλμ μ, ν, μ’, μ° 4κ°μ§ λ°©ν₯μ λνμ¬, μ무리 λ©λ¦¬ μλλΌλ μ₯μ λ¬Όλ‘ λ§νκΈ° μ κΉμ§μ νμλ€μ λͺ¨λ λ³Ό μ μλ€κ³ κ°μ νμ.
λ€μκ³Ό κ°μ΄ 3x3 ν¬κΈ°μ 볡λμ μ λ³΄κ° μ£Όμ΄μ§ μν©μ νμΈν΄λ³΄μ. λ³Έ λ¬Έμ μμ μμΉ κ°μ λνλΌ λλ (ν,μ΄)μ ννλ‘ νννλ€. μ μλμ΄ μ‘΄μ¬νλ μΉΈμ T, νμμ΄ μ‘΄μ¬νλ μΉΈμ S, μ₯μ λ¬Όμ΄ μ‘΄μ¬νλ μΉΈμ Oλ‘ νμνμλ€. μλ κ·Έλ¦Όκ³Ό κ°μ΄ (3,1)μ μμΉμλ μ μλμ΄ μ‘΄μ¬νλ©° (1,1), (2,1), (3,3)μ μμΉμλ νμμ΄ μ‘΄μ¬νλ€. κ·Έλ¦¬κ³ (1,2), (2,2), (3,2)μ μμΉμλ μ₯μ λ¬Όμ΄ μ‘΄μ¬νλ€.
μ΄ λ (3,3)μ μμΉμ μ‘΄μ¬νλ νμμ μ₯μ λ¬Ό λ€νΈμ μ¨μ΄ μκΈ° λλ¬Έμ κ°μλ₯Ό νΌν μ μλ€. νμ§λ§ (1,1)κ³Ό (2,1)μ μμΉμ μ‘΄μ¬νλ νμμ μ μλμκ² λ€ν€κ² λλ€.
νμλ€μ 볡λμ λΉ μΉΈ μ€μμ μ₯μ λ¬Όμ μ€μΉν μμΉλ₯Ό 골λΌ, μ νν 3κ°μ μ₯μ λ¬Όμ μ€μΉν΄μΌ νλ€. κ²°κ³Όμ μΌλ‘ 3κ°μ μ₯μ λ¬Όμ μ€μΉνμ¬ λͺ¨λ νμλ€μ κ°μλ‘λΆν° νΌνλλ‘ ν μ μλμ§ κ³μ°νκ³ μ νλ€. NxN ν¬κΈ°μ 볡λμμ νμ λ° μ μλμ μμΉ μ λ³΄κ° μ£Όμ΄μ‘μ λ, μ₯μ λ¬Όμ μ νν 3κ° μ€μΉνμ¬ λͺ¨λ νμλ€μ΄ μ μλλ€μ κ°μλ₯Ό νΌνλλ‘ ν μ μλμ§ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄ N=5μΌ λ, λ€μκ³Ό κ°μ΄ μ μλ λ° νμμ μμΉ μ λ³΄κ° μ£Όμ΄μ‘λ€κ³ κ°μ νμ.
μ΄ λ λ€μκ³Ό κ°μ΄ 3κ°μ μ₯μ λ¬Όμ μ€μΉνλ©΄, λͺ¨λ νμλ€μ μ μλμ κ°μλ‘λΆν° νΌνλλ‘ λ§λ€ μ μλ€.
π₯μ λ ₯ 쑰건
//μ1
5
X S X X T
T X S X X
X X X X X
X T X X X
X X T X X
//μ2
4
S S S T
X X X X
X X X X
T T T X
π€μΆλ ₯ 쑰건
//μ1
YES
//μ2
NO
μ€μ νμ΄ μκ° : 50λΆ
μ λ ₯
κ³μ°
μΆλ ₯
λ³λ λ©μλ
import java.util.*;
public class Main {
static int N;
static int[][] arr;
static int[] dx = {-1, 1, 0 ,0};
static int[] dy = {0, 0, -1, 1};
static boolean result;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
sc.nextLine();
arr = new int[N][N];
for(int i=0; i<N; i++){
String map = sc.nextLine();
for(int j=0; j<N; j++){
arr[i][j] = map.charAt(0) - '0';
}
}
result = bfs();
if(result == true){
System.out.println("YES");
} else {
System.out.println("NO");
}
}
public static boolean bfs(){
Queue<int[]> queue = new LinkedList<>();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 2) {
queue.offer(new int[]{i, j});
}
}
}
while(!queue.isEmpty()){
int[] now = queue.poll();
int x = now[0];
int y = now[1];
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >=N || ny >=N){
continue;
}
arr[nx][ny] = 2;
queue.offer(new int[]{nx,ny});
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 0) {
return false;
}
}
}
return true;
}
}
map.charAt(0) - '0'
-> map.charAt(j)
λ‘ λ³κ²½...
public static boolean check() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 'T') {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
while (nx >= 0 && nx < N && ny >= 0 && ny < N) {
if (arr[nx][ny] == 'S') return true;
if (arr[nx][ny] == 'O') return false;
nx += dx[k];
ny += dy[k];
}
}
}
}
}
return true;
}
μ€μ νμ΄ μκ° : 1μκ° 48λΆ(μ€μ νμ΄ μκ° ν¬ν¨)
μ λ ₯
κ³μ°
μΆλ ₯
λ³λ λ©μλ
BFS
check
import java.util.*;
public class Main {
static int N;
static char[][] arr;
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
static boolean foundSolution;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
sc.nextLine();
arr = new char[N][N];
for (int i = 0; i < N; i++) {
String map = sc.nextLine();
for (int j = 0; j < N; j++) {
arr[i][j] = map.charAt(j * 2); // 곡백
}
}
foundSolution = false;
dfs(0);
if (foundSolution) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
public static void dfs(int count) {
if (count == 3) { // μ₯μ λ¬Ό 3κ° μ€μΉ
if (check()) {
foundSolution = true;
}
return;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 'X') {
arr[i][j] = 'O';
dfs(count + 1);
if (foundSolution) return;
arr[i][j] = 'X';
}
}
}
}
// κ°μλ₯Ό νΌν μ μλμ§ νμΈνλ λ©μλ
public static boolean check() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 'T') {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
while (nx >= 0 && nx < N && ny >= 0 && ny < N) {
if (arr[nx][ny] == 'S') {
return false; // νμ λ°κ²¬ μ false
}
if (arr[nx][ny] == 'O') {
break; // μ₯μ λ¬Ό λ°κ²¬ μ μ€μ§
}
nx += dx[k];
ny += dy[k];
}
}
}
}
}
return true; // λͺ¨λ μ μλμ΄ νμμ λ°κ²¬νμ§ λͺ»νλ κ²½μ°μ ν΄λΉ
}
}