Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/Algorithm

[Eric's ๋ฐฑ์ค€] 2583๋ฒˆ - ์˜์—ญ ๊ตฌํ•˜๊ธฐ - Java

Eric_ko 2023. 2. 11. 17:23

์•ˆ๋‡ฝํ•˜์„ธ์š”! Eric ์ž…๋‹ˆ๋‹ค!

์˜ค๋Š˜์€ ์ œ๊ฐ€ bfs ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜ ํ’€์–ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ๋Š” ๋ฐฑ์ค€ 2583๋ฒˆ ์˜์—ญ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ ์ž…๋‹ˆ๋‹ค!

 

๋ฌธ์ œ

ํ•ด์„ค

์šฐ์„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•ด์„œ๋Š” map ์ด๋ผ๋Š” int[][] ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

์ด๋•Œ์˜ int[][] map = new intp[M][N] ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ํ•ด๋‹น ๋ชจ๋ˆˆ์ข…์ด๊ฐ€ ์ž…๋ ฅ์˜ ์ฒซ๋ฒˆ์งธ ์ค„์—์„œ ๊ทธ๋ ‡๊ฒŒ ์ฃผ์–ด์ง€๋ฏ€๋กœ

๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ์˜ ์ฒซ๋ฒˆ์งธ ์ค„์—์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›๋Š” K๊ฐ’์€ 

for ๋ฌธ์„ ํ†ตํ•ด์„œ K๋ฒˆ ๋Œ์•„์„œ ์ž…๋ ฅ์—์„œ ์ฃผ์–ด์ง„ ๊ฐ’์„ map ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  bfs ๋ฅผ ๋Œ๋ฉด์„œ

ํ•ด๋‹น ํ•˜๋Š” ์˜์—ญ์˜ ๋ฉด์ ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

bfs ๋ฅผ ๋Œ๋ฉด์„œ dx, dy๋ฅผ ํ†ตํ•ด์„œ ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ,ํ•˜,์ขŒ,์šฐ ์˜ map ๊ฐ’์ด 0 ์ด๋ฉด ํ•ด๋‹น์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ

์˜์—ญ์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ ,

๋งŒ์•ฝ map๊ฐ’์ด 1 ์ด๋ฉด ๊ทธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ๋๋ƒ…๋‹ˆ๋‹ค.

์ด๋•Œ, ์ด๋™ํ•˜๋Š” ๋งŒํผ์˜ ์–‘์ด ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๊ณ ์žํ•˜๋Š” ๋ฉด์ ์˜ ํฌ๊ธฐ๋ฅผ area+1 ์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ํ•ด๋‹น ๋ˆˆ๊ธˆ์˜ ๋ฉด์ ์ด 1*1 ์ด๋ฏ€๋กœ area+1์„ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  bfs๋ฅผ ๊ตฌํ•˜๋Š” ์กฐ๊ฑด์ด ๋ ๋•Œ๋งˆ๋‹ค cnt+1์„ ํ•ด์ฃผ์–ด

๋‚˜๋ˆ„์–ด์ง„ ํ•ด๋‹น ๋ถ€๋ถ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class N2583 {
static int N, M, K;
static int[] dx = {0, 1, 0, -1}; // x๊ฐ’์ด ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„
static int[] dy = {1, 0, -1, 0}; // y๊ฐ’์ด ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„
static boolean[][] visited; // ํ•ด๋‹น ์นธ์„ ์ง€๋‚ด๊ฐ”์œผ๋ฉด true
static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 0. ์ž…๋ ฅ
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
map = new int[M][N];
visited = new boolean[M][N];
ArrayList<Integer> list = new ArrayList<>();
int cnt = 0;
// 1. map์— ๊ทธ๋ฆผ ํ‘œ์‹œ ํ•˜๊ธฐ
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
// ์ฃผ์–ด์ง„ ์‚ฌ๊ฐํ˜•์˜ ๋์ ์„ ๊ฐ๊ฐ for๋ฌธ์„ ๋Œ๋ฉด์„œ ๋ฉด์  ๋ถ€๋ถ„์— 1๋กœ ํ‘œ์‹œ๋ฅผํ•ฉ๋‹ˆ๋‹ค.
for (int y = y1; y < y2; y++) {
for (int x = x1; x < x2; x++) {
map[y][x] = 1;
}
}
}
// 2. bfs ๋Œ๊ธฐ ๋ฐ ์˜์—ญ ๋ฐ์ดํ„ฐ ๋ฝ‘๊ธฐ
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if (!visited[i][j] && map[i][j] == 0) {
int area = bfs(new Point(i, j));
list.add(area);
cnt++;
}
}
}
// 4. ์ถœ๋ ฅ
System.out.println(cnt);
Collections.sort(list);
for (int x : list) {
System.out.print(x + " ");
}
br.close();
}
// 3. bfs ๋กœ ์˜์—ญ ๊ตฌํ•ด๋ณด๊ธฐ
public static int bfs(Point pt) {
Queue<Point> queue = new LinkedList<>();
queue.offer(pt);
visited[pt.x][pt.y] = true;
int area = 1; // area ๊ฐ€ 1๋กœ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ์ด์œ ๋Š” ์ด๋ฏธ bfs๋กœ ๋“ค์–ด์™”๋‹ค๋Š”๊ฑฐ ์ž์ฒด๊ฐ€ 1๊ฐœ ์ด์ƒ ์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ
while (!queue.isEmpty()) {
Point tmp = queue.poll();
int curX = tmp.x;
int curY = tmp.y;
for (int i = 0; i < 4; i++) {
int nx = curX + dx[i];
int ny = curY + dy[i];
if (nx >= 0 && nx < M && ny >= 0 && ny < N) {
if (!visited[nx][ny] && map[nx][ny] == 0) {
visited[nx][ny] = true;
queue.offer(new Point(nx, ny));
area++;
}
}
}
}
return area; //ํ•ด๋‹น ์˜์—ญ์˜ ๋ฉด์ 
}
}
// ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•ด์„œ Point ๋ผ๋Š” Class ๋กœ ๊ด€๋ฆฌ
class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
view raw N2583.java hosted with โค by GitHub

Solved.ac ํ”„๋กœํ•„