๋ฌธ์

์๋ ํ์ธ์! 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); | |
} | |
} | |
} | |
} | |
} | |
} |

'๐ป ๊ฐ๋ฐ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Eric's ๋ฐฑ์ค] 3046๋ฒ - R2 - Python (0) | 2024.03.13 |
---|---|
[Eric's ๋ฐฑ์ค] 2667๋ฒ - ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ - Java ๐ฏ (2) | 2023.02.25 |
[Eric's ๋ฐฑ์ค] 7569๋ฒ - ํ ๋งํ - Java ๐ ๐ (2) | 2023.02.17 |
[Eric's ๋ฐฑ์ค] 7576๋ฒ - ํ ๋งํ - Java ๐ (2) | 2023.02.17 |
[Eric's ๋ฐฑ์ค] 9020๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก - Java (0) | 2023.02.16 |