코딩가딩가딩/알통

[BOJ] 3955 탈출 (Java)

worldforest 2021. 1. 2. 15:22

 

BOJ 3055 탈출 JAVA

💡 how 

물, 고슴도치 큐를 만들어서 물 먼저 사방탐색하고 그 다음에 고슴도치 이동!

메모리 초과 나서 다시 풀어야된다..

		int answer = 1;
		while (true) {
			if (hedghog.size() == 0) {
				System.out.println("KAKTUS");
				return;
			}
			waterGo();
			if (hedghogGo()) {
				System.out.println(answer);
				return;
			}
			answer++;
		}
private static void waterGo() {
		int size = water.size();
        
		for (int s = 0; s < size; s++) {
			RC current = water.poll();

			for (int dir = 0; dir < 4; dir++) {
				int newR = current.r + dirs[dir][0];
				int newC = current.c + dirs[dir][1];

				if (!canGo(newR, newC))
					continue;

				if (map[newR][newC] == 0) {
					map[newR][newC] = -1;
					water.add(new RC(newR, newC));
				}
			}
		}
	}
	private static boolean hedghogGo() {
		int size = hedghog.size();
        
		for (int s = 0; s < size; s++) {
			RC current = hedghog.poll();

			for (int dir = 0; dir < 4; dir++) {
				int newR = current.r + dirs[dir][0];
				int newC = current.c + dirs[dir][1];

				if (!canGo(newR, newC))
					continue;
                    
				if (map[newR][newC] == 2) {
					hedghog.add(new RC(newR, newC));
					return true;
				}

				if (map[newR][newC] == 0) {
					hedghog.add(new RC(newR, newC));
				}
			}
		}
		return false;
	}
	private static boolean canGo(int r, int c) {
 	   if (r >= 0 && c >= 0 && r < R && c < C) {
   	     return true;
	   }
  	   return false;
	}

 

반응형