Seize your moment! ๐Ÿ‘พ

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

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

[Eric's ๋ฐฑ์ค€] 1012๋ฒˆ - ์œ ๊ธฐ๋†๋ฐฐ์ถ” ๐Ÿฅฌ - Java

Eric_ko 2023. 2. 24. 22:27

๋ฌธ์ œ

์•ˆ๋…•ํ•˜์„ธ์š”! Eric ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜ ํ’€์–ด๋ณผ ๋ฌธ์ œ๋Š”

๋ฐฑ์ค€ 1012๋ฒˆ , ์œ ๊ธฐ๋† ๋ฐฐ์ถ” ์ž…๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋ฉด ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋„๋ก ํ•˜์ฃ !

 

ํ’€์ด

์šฐ์„  ์œ ๊ธฐ๋†๋ฐฐ์ถ”๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด์„œ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด ๋ฅผ ๊น”์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

๊น”๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š” ์œ„์น˜์— ๊น”์•„์•ผ๋ฉฐ, ๊ทธ ์ง€๋ ์ด๊ฐ€ ์ƒํ•˜์ขŒ์šฐ ๋กœ ์›€์ง์ด๋ฉด์„œ ๋ฐฐ์ถ”๋ฅผ ๋ณดํ˜ธํ•œ๋‹ค

์ด๋ฅผ ์ €๋Š” dfs๋ฅผ ํ†ตํ•ด์„œ ๊ตฌ์—ฐํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

์šฐ์„  ์ฃผ์–ด์ง„ test case๋ฅผ int๋กœ ๋ฐ›๊ณ ,

๊ทธ๋•Œ์˜ ์ฃผ์–ด์ง„ ๋ฐฐ์ถ”๋ฐญ์˜ ๊ธธ์ด m๊ณผ n์„ ๋ฐ›์•„์„œ

์ด๋ฅผ ํ†ตํ•ด์„œ boolean[] graph๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋Š” ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š” ์œ„์น˜์— true๊ฐ’์„ ์ฃผ๋ฉฐ,

๋ฐฐ์ถ”๊ฐ€ ์—†๋Š” ์œ„์น˜์—๋Š” false๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ ์‚ฌ์ด์ง€์˜ boolean[] visited ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ 

dfs๊ฐ€ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์ง€์ ์„ ๋ฐฉ๋ฌธํ•˜๋ฉด true๋กœ ๊ฐ’์„ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

 

์ฝ”๋“œ

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class N1012 {
static boolean[][] graph;
static boolean[][] visited;
static int n, m, k, answer;
static int[] dx = {0, -1, 0, 1};
static int[] dy = {1, 0, -1, 0};
public static void main(String[] args) throws IOException {
// 0. ์ž…๋ ฅ ๋ฐ ์ดˆ๊ธฐํ™”
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
for (int i = 0; i < tc; i++) {
answer = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
// 1. ๊ทธ๋ž˜ํ”„ ์ •๋ณด ์ž…๋ ฅ
graph = new boolean[m][n];
visited = new boolean[m][n];
for (int j = 0; j < k; j++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
graph[x][y] = true;
}
for (int g = 0; g < m; g++) {
for (int h = 0; h < n; h++) {
if (graph[g][h] && !visited[g][h]) {
dfs(g, h);
answer++;
}
}
}
System.out.println(answer);
}
br.close();
}
//bfs๋ฅผ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œํ•˜๊ธฐ
public static void dfs(int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int cx = x + dx[i];
int cy = y + dy[i];
if (cx >= 0 && cy >= 0 && cx < m && cy < n) {
if (!visited[cx][cy] && graph[cx][cy]) {
dfs(cx, cy);
}
}
}
}
}
}
view raw N1012.java hosted with โค by GitHub