[swexpert] 7733. 치즈 도둑 (bfs, java)
728x90
반응형
답의 초기값을 1로 초기화하지 않고 음수 등으로 초기화하면 테스트 한 개를 통과 못한다.
처음에는 1덩이이므로 (모두 1이상임) 1로 초기화해준다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Solution {
static int n;
static int t;
static int map[][];
static int result;
static int ypos[]= {0,0,1,-1};
static int xpos[]= {1,-1,0,0};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
t=sc.nextInt();
for (int tc = 1; tc <=t; tc++) {
n=sc.nextInt();
map=new int[n][n];
result=1; //처음은 1덩이이다.
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j]=sc.nextInt();
}
}
check();
for (int i = 1; i <= 100; i++) {
bfs(i);
check();
}
System.out.printf("#%d %d\n",tc,result);
}
}
private static void check() {
int cnt=0;
boolean[][] vis=new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(map[i][j]!=0 && vis[i][j]==false) {
vis[i][j]=true;
Queue<Integer[]> q=new LinkedList<Integer[]>();
q.add(new Integer[] {i,j});
while(q.size()!=0) {
int y=q.peek()[0];
int x=q.peek()[1];
q.poll();
for (int k = 0; k < 4; k++) {
int yy=y+ypos[k];
int xx=x+xpos[k];
if(xx<0 || yy<0 || xx>=n || yy>=n)continue;
if(vis[yy][xx])continue;
if(map[yy][xx]==0)continue;
vis[yy][xx]=true;
q.add(new Integer[] {yy,xx});
}
}
cnt+=1;
}
}
}
if(cnt>result) {
result=cnt;
}
}
private static void bfs(int num) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(map[i][j]==num) {
map[i][j]=0;
}
}
}
}
}
728x90
반응형
'swexpert' 카테고리의 다른 글
[swexpert] 3289. 서로소 집합 (java, union-find 함수) (0) | 2021.03.18 |
---|---|
[swexpert] 1238. Contact (java, bfs) (0) | 2021.03.16 |
[swexpert] 1226. 미로 1 (bfs, java) (0) | 2021.03.08 |
[swexpert] 1234. 비밀번호 (java) (0) | 2021.02.26 |
[swexpert] 프로세서 연결하기 (java, dfs, 백트래킹) (0) | 2021.02.25 |
TAGS.