https://www.acmicpc.net/problem/1012
나의 풀이 : 재귀로 해결
테이블을 사용해서 배추의 위치를 찍는다.
그 다음 테이블을 탐색하며 배추를 찾는다면 처음 한번만 카운트를 한 다음 인접한 배추들을 모두 제거하는
remove메소드를 수행한다. 인접한 배추를 모두 뽑고 처음 한번만 카운트 한다면 문제에서 필요로 하는 답을 얻을 수 있다.
나의코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static boolean[][] table;
static int count;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
count = 0;
String[] tmp = br.readLine().split(" ");
int M = Integer.parseInt(tmp[0]), N = Integer.parseInt(tmp[1]), K = Integer.parseInt(tmp[2]);
table = new boolean[M + 2][N + 2];
for (int i = 0; i < K; i++) {
String[] x_y = br.readLine().split(" ");
table[Integer.parseInt(x_y[0]) + 1][Integer.parseInt(x_y[1]) + 1]= true;
}
for(int i = 1 ; i<table.length-1;i++) {
for(int j = 1; j<table[0].length-1;j++) {
if(table[i][j]) {
count++;
remove(i,j);
}
}
}
sb.append(count+"\n");
}
System.out.println(sb);
}
public static void remove(int x, int y) {
table[x][y] = false;
int[] ch_x = {-1,0,0,1};
int[] ch_y = {0,-1,1,0};
for(int i = 0; i<4;i++) {
if(table[x+ch_x[i]][y+ch_y[i]]) {
remove(x+ch_x[i],y+ch_y[i]);
}
}
}
}
'공부-코딩테스트 > 코테풀이 - 자바, 파이썬' 카테고리의 다른 글
19238. 스타트 택시 (백준, 자바) (0) | 2022.09.18 |
---|---|
6497. 전력난 (코딩테스트, 백준, 자바) (0) | 2022.08.29 |
다리 놓기 (자바, 코딩테스트, 백준) (0) | 2022.08.04 |
11660. 구간 합 구하기 5 (자바, 코딩테스트, 백준) (0) | 2022.08.03 |
11659.구간 합 구하기 4 (자바, 코딩테스트, 백준) (0) | 2022.08.03 |
댓글