진짜 하루 죙일 품 ;;;;;;;;
https://www.acmicpc.net/problem/1926
package algo;
import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BJ_1926_2 {
public static int N;
public static int M;
public static int size; // 1의 사이즈를 잰다
public static int max; // 1의 최고 사이즈
public static int cnt; // 1의 구역 갯수
public static int map[][];
public static boolean visited[][];
public static Queue q = new LinkedList();
public static final int dx[] = {1,-1,0,0}; // 동 서 남 북 순으로 탐색
public static final int dy[] = {0,0,-1,1}; // 동 서 남 북 순으로 탐색
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M];
visited = new boolean[N][M];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) {
map[i][j] =Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) { //map을 한 번씩 탐색하는 for문
if(map[i][j] ==1 && !visited[i][j]) {
size=0;
q.offer(new Point(i,j));
bfs(i,j);
cnt++;
}
}
}
if(cnt ==0) {
System.out.println(0);
System.out.print(0);
}else {
System.out.println(cnt);
System.out.print(max);
}
}
public static void bfs(int x, int y) {
int nx ;
int ny ;
q.offer(new Point(x,y)); //
visited[x][y] = true;
size++;
while(!q.isEmpty()) { //큐가 빌 때까지
Point temp =q.poll(); //q에 넣었던 x,y좌표를 넣어주고 삭제
for(int d=0; d<4; d++) {
nx = temp.x + dx[d];
ny = temp.y + dy[d]; //다음 칸 좌표 , 동 서 남 북 순으로 탐색
if(nx<0 || ny<0 || nx>=N || ny>=M) {//다음 좌표가 맵을 벗어날때
continue;
}
if(map[nx][ny] ==0 || visited[nx][ny]) { //다음 칸이 0이거나 방문했으면
continue; //계속 for문 돌기
}
//다음 칸이 방문 안했고 1일때
q.offer(new Point(nx,ny));
visited[nx][ny] =true;
size++;
}
}
max = max > size ? max : size;
}
}
-----------------------------------------------------------------------------------
마지막에 import java.awt.Point;
이거 안써줘서 컴파일 에러나서 진짜 빡쳤다..
다른 class 파일에
class Point{
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
이거 만들어 줘서 이 클래스 파일에서 Point 안만들어줘도 에러안나는데 백준에서 하려면 당연 컴파일 에러나지
진짜 빡치지만 그래도 오늘도 하나 배웠다. . .. . . . ..........
블로그 보고 베끼는데 답이 계속 안나와서
그냥 새로 다시 코드 쳐서 완성했더니 드디어 제대로 된 값 나왔다.
아무리 봐도 둘이 뭐가 다른지 모르겠는데 답이 달라 개빡침.............................................................
-----------------------
찾았다. dx ,dy로 적어야 되는데
dx dx 로 적어서 탐색 이상하게 한거였음 ,,ㅋ,, ㅋ
내 하루 ,, ,,,,,,,,,,,,,,
'백준알고리즘' 카테고리의 다른 글
백준 9252번 LCS 2 런타임 에러 (0) | 2020.06.03 |
---|---|
백준 JAVA 11812 K진 트리 (0) | 2020.05.10 |
백준 11720 숫자의 합 charAt (0) | 2020.04.22 |
백준 1806 부분합[투 포인터] (0) | 2020.04.20 |
백준 2096 내려가기 [DP][슬라이딩 윈도우] (0) | 2020.04.19 |
댓글