Skip to content

Commit ddc0f68

Browse files
committed
[level 2] Title: 미로 탈출, Time: 7.36 ms, Memory: 79 MB -BaekjoonHub
1 parent 72e4e5c commit ddc0f68

File tree

2 files changed

+24
-43
lines changed

2 files changed

+24
-43
lines changed

프로그래머스/2/159993. 미로 탈출/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### 성능 요약
66

7-
메모리: 91.9 MB, 시간: 6.75 ms
7+
메모리: 79 MB, 시간: 7.36 ms
88

99
### 구분
1010

@@ -16,7 +16,7 @@
1616

1717
### 제출 일자
1818

19-
2025년 08월 25일 13:35:57
19+
2025년 08월 25일 13:55:13
2020

2121
### 문제 설명
2222

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,56 @@
11
import java.util.*;
2-
32
class Solution {
4-
// 상 하 좌 우
5-
int[] dx = {0,0,-1,1};
6-
int[] dy = {-1,1,0,0};
3+
int[] dx = {-1,1,0,0};
4+
int[] dy = {0,0,1,-1};
75

86
public int solution(String[] maps) {
9-
int[] start = new int[2];
10-
int[] lever = new int[2];
11-
int[] exit = new int[2];
12-
137
int row = maps.length;
148
int col = maps[0].length();
159

16-
for(int i =0; i < row;i ++){
17-
for(int j = 0; j<col;j++){
18-
char c = maps[i].charAt(j);
19-
// 시작 지점
20-
if(c =='S'){
21-
start = new int[]{i,j};
22-
}else if(c == 'E'){
23-
exit = new int[]{i,j};
24-
} else if(c=='L'){
10+
int[] start = new int[2];
11+
int[] exit = new int[2];
12+
int[] lever = new int[2];
13+
14+
for(int i=0;i<row;i++){
15+
for(int j=0;j<col;j++){
16+
if(maps[i].charAt(j) == 'S'){
17+
start = new int[]{i,j};
18+
} else if(maps[i].charAt(j) == 'L'){
2519
lever = new int[]{i,j};
20+
} else if(maps[i].charAt(j) == 'E'){
21+
exit = new int[]{i,j};
2622
}
2723
}
2824
}
2925

30-
// start -> lever 거리
3126
int startToLever = bfs(start,lever,maps);
32-
if(startToLever == -1){
33-
return -1;
34-
}
35-
36-
// lever -> exit 거리
37-
int LeverToExit = bfs(lever,exit,maps);
38-
if(LeverToExit == -1){
39-
return -1;
40-
}
27+
if(startToLever == -1) return -1;
28+
int leverToExit = bfs(lever,exit,maps);
29+
if(leverToExit == -1) return -1;
4130

42-
return startToLever + LeverToExit;
31+
return leverToExit + startToLever;
4332
}
4433

45-
int bfs(int[] start,int end[], String[] maps){
34+
int bfs(int[] start, int[] end, String[] maps){
4635
int row = maps.length;
4736
int col = maps[0].length();
48-
// 현재 위치, 시간
37+
4938
Queue<int[]> queue = new LinkedList<>();
5039
boolean[][] visited = new boolean[row][col];
5140

52-
// 초기 위치
53-
queue.add(new int[]{start[0],start[1],0});
54-
visited[start[0]][start[1]] = true;
41+
queue.add(new int[] {start[0], start[1], 0});
5542

5643
while(!queue.isEmpty()){
5744
int[] cur = queue.poll();
5845
int curX = cur[0];
5946
int curY = cur[1];
6047
int time = cur[2];
6148

62-
// 도착
6349
if(curX == end[0] && curY == end[1]){
6450
return time;
6551
}
6652

67-
// 모든 방향 체크
68-
for(int i=0;i<4;i++){
53+
for(int i = 0; i< 4 ; i++){
6954
int nextX = curX + dx[i];
7055
int nextY = curY + dy[i];
7156

@@ -74,12 +59,8 @@ int bfs(int[] start,int end[], String[] maps){
7459
visited[nextX][nextY] = true;
7560
queue.add(new int[]{nextX,nextY,time+1});
7661
}
77-
}
62+
}
7863
}
79-
8064
return -1;
8165
}
82-
83-
84-
8566
}

0 commit comments

Comments
 (0)