[๋ฐฑ์ค] ๐ฅ 1926 ๊ทธ๋ฆผ
๐ ๋์ด๋
๐ฅ Silver 1
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1926
๐ ํ์ด
์ฝ๋ฉํ
์คํธ์์ ๊ฐ์ฅ ์ด๋ ต๋ค๋ BFS๊ด๋ จ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ๊ณต๋ถํ ๋ค์ ์ฐ๊ด๋ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณด์๋ค.
๊ทผ๋ฐ BFS ๋ฌธ์ ๋ ๋์ด๋๊ฐ ๋ธ๋ก ์ฆ๋ ์ปค๋
์ค๋ฒ2๋ถํฐ ์์ํ๋ค.
๋จ๋ฆฌ๋ ๋ง์์ผ๋ก ์ฒ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
์ฒ์์๋ boolean[][] drawPaper
๊ฐ ์๋ class paper
๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ int isCheck
์ int isDraw
๋ฅผ ๋ฃ์ด์ ๊ตฌ๋ณ์ ํ๋ ค๊ณ ํ์๋ค.
๊ทธ๋ฐ๋ฐ ์๊ฐํด๋ณด๋ ๊ตณ์ด ๋์ ๊ตฌ๋ณํ ํ์์์ด, ํ์ธํ ๊ณณ์ ๋น๊ณณ์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ ค์ ์ฒ๋ฆฌํด๋ฒ๋ฆฌ๋ฉด ์ฉ๋๋ ์๋ผ๊ณ , ์๋๋ ๋นจ๋ผ์ง ๊ฒ ๊ฐ์์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ์ ํ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐ์ด์ ๋ชจ๋ ๊ณณ์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์๋์ง(true) ํ์ธ์ ํ๋ฉด์, ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ผ๋ฉด(true), ๊ทธ๊ณณ์ ๊ทธ๋ฆผ์ ์ง์ดํ(false), Queue
์ ์์น๋ฅผ ์ ์ฅํ๊ณ , currnetArea
๋ฅผ 1๋ก ์ด๊ธฐํํ๊ณ , paperCount
์ 1์ ๋ํด์ฃผ์๋ค.
์ดํ while(!q.isEmpty())
๋ฌธ์ ํตํด ๊ทธ๋ฆผ์ด ์๋ ์์น์ ์ ํด์๋ ์ํ์ข์ฐ๋ฅผ ๋น๊ตํ๊ธฐ ์ํ์ฌ, DR/DC
๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์์น๋ฅผ ๊ตฌํด์ฃผ์๋ค.
์ดํ ๊ทธ ์์น์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ(true)์์ผ๋ฉด ๋น๊ณณ(false)์ผ๋ก ๋ฐ๊พธ๊ณ , ๊ทธ ์์น๋ฅผ ๋๋ค์ Queue
์ ๋ฃ์ด์ฃผ์๋ค.
์ดํ whlie
๋ฌธ์ด ๋๋๋ฉด Math.max
๋ฅผ ํตํ์ฌ currentArea
์ maxArea
๋ฅผ ๋น๊ตํ์๋ค.
์ฒ์์ผ๋ก ํผ BFS ๋ฌธ์ ์์ง๋ง, ์๊ฐ๋ณด๋ค ์ฝ๊ฒ ํ๋ ค์ ๊ธฐ๋ถ์ด ์ข์๋ค.
๐ Code
package BFS;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class N1926 {
static boolean[][] drawPaper;
static final int[] DR = {0, -1, 0, 1};
static final int[] DC = {1, 0, -1, 0};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
drawPaper = new boolean[n][m];
Queue<Integer[]> q = new LinkedList<>();
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
if (Integer.parseInt(st.nextToken()) == 1) {
drawPaper[i][j] = true;
} else {
drawPaper[i][j] = false;
}
}
}
int maxArea = 0;
int currentArea = 0;
int paperCount = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (drawPaper[i][j]) {
drawPaper[i][j] = false;
q.add(new Integer[]{i, j});
currentArea = 1;
paperCount += 1;
}
while (!q.isEmpty()) {
Integer[] cur = q.poll();
for (int k = 0; k < 4; k++) {
int nextR = cur[0] + DR[k];
int nextC = cur[1] + DC[k];
if (nextR < 0 || nextR >= n || nextC < 0 || nextC >= m ||
!drawPaper[nextR][nextC]) {
continue;
}
drawPaper[nextR][nextC] = false;
q.add(new Integer[]{nextR, nextC});
currentArea += 1;
}
}
maxArea = Math.max(currentArea, maxArea);
}
}
System.out.println(paperCount + " " + maxArea);
}
}
package (์ด๋ฆ); ๋ฅผ ๋๊ณ , class ์ด๋ฆ์ Main
์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐