https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (
www.acmicpc.net
미로찾기문제를 응용하여 푸는 문제였다. 배추가 있는 곳을 저장해두고 방문하지않은 장소가 있으면 dfs를 이용하여 탐색 후 카운트를 1증가하는 방식으로 문제를 해결하였다.
풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package DFS_BFS; import java.util.*; import java.io.*; public class 유기농배추 { static int m,n; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); for (int i = 0; i < T; i++) { st = new StringTokenizer(br.readLine()); m = Integer.parseInt(st.nextToken()); n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); int[][] field = new int[n][m]; int[][] spot = new int[k][2]; boolean[][] visit = new boolean[n][m]; for (int j = 0; j < k; j++) { st = new StringTokenizer(br.readLine()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); spot[j][0] = y; spot[j][1] = x; field[y][x] = 1; } int res = 0; for (int j = 0; j < spot.length; j++) { int ty = spot[j][0]; int tx = spot[j][1]; if (!visit[ty][tx]) { DFS(ty, tx, visit, field); res++; } } sb.append(res).append("\n"); } System.out.println(sb); } static void DFS(int y,int x,boolean[][] visit,int[][]field){ if(y<0||x<0||x>=m||y>=n||visit[y][x]||field[y][x]==0){ return; } visit[y][x] = true; DFS(y+1,x,visit,field); DFS(y-1,x,visit,field); DFS(y,x+1,visit,field); DFS(y,x-1,visit,field); } } | cs |
'IT > 알고리즘' 카테고리의 다른 글
백준 1238 파티 (0) | 2020.04.07 |
---|---|
백준7576 토마토 (자바) (0) | 2020.03.27 |
백준 1931 회의실배정 (0) | 2020.03.23 |
백준2667 단지번호 붙이기 (0) | 2020.03.21 |
백준15652 n과m(4) (0) | 2020.03.19 |