반응형

 

[광고 누르면 오늘의 행운 상승!!]

https://www.acmicpc.net/problem/3187

 

3187번: 양치기 꿍

문제 양치기 꿍은 맨날 늑대가 나타났다고 마을 사람들을 속였지만 이젠 더이상 마을 사람들이 속지 않는다. 화가 난 꿍은 복수심에 불타 아예 늑대들을 양들이 있는 울타리안에 마구 집어넣어 양들을 잡아먹게 했다. 하지만 양들은 보통 양들이 아니다. 같은 울타리 영역 안의 양들의 숫자가 늑대의 숫자보다 더 많을 경우 늑대가 전부 잡아먹힌다. 물론 그 외의 경우는 양이 전부 잡아먹히겠지만 말이다. 꿍은 워낙 똑똑했기 때문에 이들의 결과는 이미 알고있다. 만약 빈

www.acmicpc.net

bfs 문제 

bfs 연습하기 좋은듯

난이도는 쉽다.

import java.io.*;
import java.util.*;

public class Main {
	public static int[] dx = {-1,0,1,0};
	public static int[] dy = {0,1,0,-1};
	public static boolean visit[][];
	public static char map[][];
	public static int R, C;
	public static Queue<int[]> q;
	public static Queue<int[]> wolflist;
	
	public static int wolf, sheep;
	
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		R = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		
		visit = new boolean[R][C];
		map = new char[R][C];
		q = new LinkedList<>();
		wolflist = new LinkedList<>();
		
		for (int i = 0; i < R; i++) {
			char[] ch = br.readLine().toCharArray();
			for (int j = 0; j < C; j++) {
				map[i][j] = ch[j];
				if(map[i][j] == 'v') {
					wolf++;
					wolflist.add(new int[] {i,j});
				}
				if(map[i][j] == 'k') sheep++;
			}
		}
		
		int qsize = wolflist.size();
		for (int i = 0; i < qsize; i++) {
			int[] pos = wolflist.poll();
			if(!visit[pos[0]][pos[1]]) {
				visit[pos[0]][pos[1]] = true;
				q.add(new int[] {pos[0],pos[1]});
				bfs();
			}
		}
		System.out.println(sheep + " " + wolf);
	}
	public static void bfs() {
		int w=1,s=0;
		
		while(!q.isEmpty()) {
			int[] pos = q.poll();
			
			for (int i = 0; i < 4; i++) {
				int nx = pos[0] + dx[i];
				int ny = pos[1] + dy[i];
				
				if(check(nx,ny)) continue;
				if(visit[nx][ny] || map[nx][ny] == '#') continue;
				
				if     (map[nx][ny] == 'v') w++;
				else if(map[nx][ny] == 'k') s++;
					 
				visit[nx][ny] = true;
				q.add(new int[] {nx,ny});
			}
		}
		
		if(w>=s) sheep -= s;
		else     wolf -= w;
		
	}
	public static boolean check(int nx, int ny) {
		return nx < 0 || nx >= R || ny < 0 || ny >=C;
	}

}
반응형

+ Recent posts