ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준][3055][자바] 탈출
    코딩/알고리즘 2018. 9. 30. 00:46

    아...될거같다 말았다 ㅜㅜ

    역시 오랜만에 풀어서 그런가..

    요즘 바쁘다.. 하이차트에 치여서 고생중이다..

    한글로 된 문서가 없어 내가 만들것들로 아주 정리를 다 해놔야겠다..

    여튼 ..

    여러번 풀다 결국엔 다른분 답을 참고했는데 

    그래도 불행 중 다행인건 접근 방법은 똑같았다는것..?..ㅜ

    내 코드를 뭉텅 뭉텅 잘라내고 살짝 로직을 수정했다

    큐 반복문을 함수안에서 돌린다는거 정도?

    일단 이 문제를 풀고 다른사람 코드를 참조하면서 배운점은 

    1. 난 쓸때없는 예외처리가 많음

    2. 분기점 위치를 잘 못잡음


    간추리자면 이정도가 되겠다..(엄청 많음)

    그래도 오랜만에 푼 것 치고는 만족...ㅜ 

    코드 참조안하고 맞추고싶다..


    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    class w_Point{
    	int y;
    	int x;
    	w_Point(int y, int x){
    		this.y = y;
    		this.x = x;
    	}
    }
    public class backjoon_3055_탈출_real {
    	static String[][] map = new String[51][51];
    	static Queue waterPoint = new LinkedList();
    	static Queue biberPoint = new LinkedList();
    	static int[] dx = {1,-1,0,0};
    	static int[] dy = {0,0,1,-1};
    	static int time_Flow = 0;
    	static int n; //행
    	static int m; //열
    	public static void main(String[] args) {
    		
    		Scanner sc = new Scanner(System.in);
    		// INPUT
    		n = sc.nextInt();
    		m = sc.nextInt();
    		sc.nextLine();
    		for(int i = 0; i < n; i++) {
    			String str = sc.nextLine();
    			String[] line = str.split("");
    			for(int j = 0; j < line.length; j++) {
    				if( line[j].equals("*")) {
    					waterPoint.add(new w_Point(i, j));
    				}
    				if( line[j].equals("S")) {
    					biberPoint.add(new w_Point(i, j));
    				}
    				
    				map[i][j] = line[j];
    			}
    		}
    		
    		
    		//맵 print
    		/*
    		for(int i =0 ; i< n; i++) {
    			for (int j = 0; j < m; j++) {
    				System.out.print(map[i][j] +" ");
    			}
    			System.out.println();
    		}
    		*/
    		
    		
    		//딱 현재 있는 큐사이즈만큼 한번 돌기 
    	
    
    		
    		while(true) {
    			int b_len = biberPoint.size();
    			time_Flow += 1;
    			//이동할  b_len 없으면 끝
    			if( b_len == 0) {
    				System.out.println("KAKTUS");
    				return;
    			}
    			
    			//물 이동 
    			waterFlow();
    			//비버 이동
    			if(biberMove()) {
    				System.out.println(time_Flow);
    				return;
    			}
    			mapPrint();
    		
    		}
    	
    	}
    
    	public static void waterFlow() {
    		int w_len = waterPoint.size();
    		
    		for (int s = 0 ; s < w_len; s++) {
    			
    			w_Point p = waterPoint.poll();
    			int garo = p.x;
    			int sero = p.y;
    			
    			for(int i = 0; i < 4; i++) {
    				int xx = garo + dx[i];
    				int yy = sero + dy[i];
    				if( xx >= 0 && xx < m && yy >= 0 && yy < n ) {
    					
    					if(map[yy][xx].equals(".")) {
    						map[yy][xx] = "*";
    						waterPoint.add(new w_Point(yy, xx));
    					}
    					
    				}
    			}
    		}
    
    	}
    	public static boolean biberMove() {
    		int b_len = biberPoint.size();
    		
    		for(int b = 0; b < b_len; b++) {
    
    			w_Point p = biberPoint.poll();
    			int garo = p.x;
    			int sero = p.y;
    			
    			for(int i = 0; i < 4; i++) {
    				int xx = garo + dx[i];
    				int yy = sero + dy[i];
    				if( xx >= 0 && xx < m && yy >= 0 && yy < n ) {
    					//비버 소굴 도착시 
    					if(map[yy][xx].equals("D")){
    						biberPoint.add(new w_Point(yy, xx));
    						return true;
    					}
    					
    					if(map[yy][xx].equals(".")) {
    						map[yy][xx] = "S";
    						biberPoint.add(new w_Point(yy, xx));
    					}
    				}
    			}
    		}
    					
    		return false;
    		
    	}
    	
    	
    	//맵 print
    	public static void mapPrint() {
    		System.out.println("------start-------");
    		for(int i =0 ; i< n; i++) {
    			for (int j = 0; j < m; j++) {
    				System.out.print(map[i][j] +" ");
    			}
    			System.out.println();
    		}
    		System.out.println("------end--------");
    	}
    }
    
    
    


    '코딩 > 알고리즘' 카테고리의 다른 글

    [백준][자바][1063]킹  (0) 2018.10.02
    [백준][자바][14502]연구소  (0) 2018.10.01
    [백준][자바][5532]방학숙제  (0) 2018.09.15
    [백준][자바]2468 안전영역  (0) 2018.09.03
    [백준][자바]2589 보물섬  (0) 2018.08.29

    댓글

Designed by Tistory.