11import java .util .*;
2-
32class 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