-
[백준][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