
1. 문제
1-1. 링크
1-2. 문제 해석
2. 코드
3. 실행시간
1. 문제
1-1. 링크
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
1-2. 문제 해석
DFS/BFS 알고리즘의 아주 기본적인 문제이다.
카테고리가 큐라서 큐를 이용해서 한 번 DFS/BFS를 구현해보세요! 라는 의미인 듯 하다.
나는 큐를 안썼지만 (...)
나중에 따로 DFS/BFS에 대한 포스팅을 할거라 자세한 설명은 추후에 링크 첨부할 예정!
2. 코드
public class Day6_1226_미로1 {
	// 상하좌우
	static int[] dx = { 0, 0, -1, 1 };
	static int[] dy = { -1, 1, 0, 0 };
	static int N = 16;
	static int[][] map = new int[N][N];
	static boolean[][] visited = new boolean[N][N];
	static int result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder(50);
		
		for (int tc = 1; tc <= 10; tc++) {
			br.readLine(); // 테스트 케이스 번호
			// 입력
			for (int i = 0; i < N; i++) {
				String line = br.readLine();
				for (int j = 0; j < N; j++) {
					map[i][j] = line.charAt(j) - '0';
				}
			}
			visited = new boolean[N][N];
			result = 0;
			dfs(1, 1);
			sb.append("#" + tc + " " + result + "\n");
		}
		System.out.println(sb.toString());
	}
	public static void dfs(int y, int x) {
		if (result == 1) {
			return;
		}
		
		// 도착한 경우
		if (isArrive(y, x)) { 
			result = 1;
			return;
		}
		// 상하좌우
		for (int i = 0; i < 4; i++) {
			int newY = y + dy[i];
			int newX = x + dx[i];
			if(check(newY, newX) && !visited[newY][newX]) {
				visited[y][x] = true;
				dfs(newY, newX);
			}
		}
	}
	public static boolean check(int y, int x) {
		if(y < 0 || x < 0 || y >= N || x >= N) return false;
		if(map[y][x] == 1) return false;
		return true;
	}
	public static boolean isArrive(int y, int x) {
		return (map[y][x] == 3) ? true : false;
	}
}
3. 실행시간

💡 느낀 점
- 재귀로 DFS를 구현하니 도착지에 도착해도 호출된 함수 스택을 한 번에 빠져나가지 못해 시간 차이가 나는 것 같다.
- 만약 메인에서 반복문과 큐를 이용한다면 바로 break를 할 수 있기 때문에 시간 단축이 될 것 같다.
반응형
    
    
    
  '문제 풀이 > SWEA' 카테고리의 다른 글
| 1231번 - 중위순회 (0) | 2021.08.17 | 
|---|---|
| 1238번 - Contact (0) | 2021.08.15 | 
| 1267번 - 작업순서 (0) | 2021.08.09 | 
| 1224번 - 계산기3 (0) | 2021.08.09 | 
| 1219번 - 길찾기 (0) | 2021.08.07 | 
 
										
									 
										
									 
										
									 
										
									
댓글