java
16 x 16 행렬의 형태로 만들어진 미로에서 출발점(2)으로부터 도착지점(3)까지 갈 수 있는 길이 있는지 구하는 문제 (1은 벽, 0은 이동할 수 있는 경로)
깊이 우선 탐색(DFS, Depth-First Search)을 사용해 문제를 해결하였다.
DFS 문제에 더 적응하기 위해 많은 문제를 풀어봐야겠다.
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
for(int test_case = 1; test_case <= 10; test_case++)
{
int[][] maze = new int[16][16];
boolean[][] visited = new boolean[16][16];
int t = sc.nextInt();
for (int i = 0; i < 16; i++) {
String line = sc.next();
for (int j = 0; j < 16; j++) {
maze[i][j] = line.charAt(j) - '0';
}
}
System.out.println("#" + test_case + " " + dfs(maze, visited, 1, 1));
}
}
private static int dfs(int[][] maze, boolean[][] visited, int x, int y) {
if (x < 0 || y < 0 || x >= 16 || y >= 16 || maze[x][y] == 1 || visited[x][y]) {
return 0;
}
if (maze[x][y] == 3) {
return 1;
}
visited[x][y] = true;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
for (int i = 0; i < 4; i++) {
if (dfs(maze, visited, x + dx[i], y + dy[i]) == 1) {
return 1;
}
}
return 0;
}
}
Java들어가며 소프트웨어가 처리해야 하는 데이터 양이 늘어날수록, 단순히 기능 구현만으로는 성능과 효율을 보장하기 어렵습니다. 특히…
들어가며 소프트웨어를 구현할 때 성능 최적화나 안정성을 높이려면, 단순히 고수준 코드만 신경 쓰는 것을 넘어…
들어가며 소프트웨어가 복잡해질수록, 단순히 알고리즘의 시간복잡도만으로는 모든 문제를 해결할 수 없습니다. 특히 운영체제 수준에서는 다중…
들어가며 복잡한 소프트웨어가 원활히 동작하려면 단순히 코드만 잘 짜는 것으로는 부족합니다. 트랜잭션 처리나 대규모 데이터…
들어가며 소프트웨어를 개발할 때 메모리 관리 방식은 프로그램의 안정성과 성능을 좌우하는 핵심 요소입니다. 특히 자바스크립트,…
들어가며 소프트웨어 개발자는 코드가 어떻게 실행되는지 정확히 이해해야 할 필요가 있습니다. 우리가 작성한 프로그램은 결국…