๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1743)
<์์๋ฌผ ํผํ๊ธฐ>
๋ฌธ์
์ฝ๋ ์ค์ฝ ์ฝ๋๋ฏธ๋์ 8์ธต์ ํ์๋ค์ด 3๋ผ์ ์์ฌ๋ฅผ ํด๊ฒฐํ๋ ๊ณต๊ฐ์ด๋ค. ๊ทธ๋ฌ๋ ๋ช๋ช ๋น์์ฌ์ ์ธ ํ์๋ค์ ๋งํ์ผ๋ก ์์๋ฌผ์ด ํต๋ก ์ค๊ฐ์ค๊ฐ์ ๋จ์ด์ ธ ์๋ค. ์ด๋ฌํ ์์๋ฌผ๋ค์ ๊ทผ์ฒ์ ์๋ ๊ฒ๋ผ๋ฆฌ ๋ญ์น๊ฒ ๋ผ์ ํฐ ์์๋ฌผ ์ฐ๋ ๊ธฐ๊ฐ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ถ์ ํ ์ ์๋์ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฌํ ์์๋ฌผ์ ์ค๋ดํ์ ๋ฌปํ๋ ๊ฒ์ ์ ๋ง ์ง์ ์ผ๋ก ์ซ์ดํ๋ค. ์ฐธ๊ณ ๋ก ์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผ ํ ๋ต์ ์ด ๋ฌธ์ ๋ฅผ ๋ธ ์กฐ๊ต๋ฅผ ๋ง์ถ๋ ๊ฒ์ด ์๋๋ค.
ํต๋ก์ ๋จ์ด์ง ์์๋ฌผ์ ํผํด ๊ฐ๊ธฐ๋ ์ฌ์ด ์ผ์ด ์๋๋ค. ๋ฐ๋ผ์ ์ ์๋์ ๋จ์ด์ง ์์๋ฌผ ์ค์ ์ ์ผ ํฐ ์์๋ฌผ๋ง์ ํผํด ๊ฐ๋ ค๊ณ ํ๋ค.
์ ์๋์ ๋์ ์ ์ผ ํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ “10ra"๋ฅผ ์ธ์น์ง ์๊ฒ ๋์์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํต๋ก์ ์ธ๋ก ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ๋ก๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ ์์๋ฌผ ์ฐ๋ ๊ธฐ์ ๊ฐ์ K(1 ≤ K ≤ N×M)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ K๊ฐ์ ์ค์ ์์๋ฌผ์ด ๋จ์ด์ง ์ขํ (r, c)๊ฐ ์ฃผ์ด์ง๋ค.
์ขํ (r, c)์ r์ ์์์๋ถํฐ, c๋ ์ผ์ชฝ์์๋ถํฐ๊ฐ ๊ธฐ์ค์ด๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ขํ๋ ์ค๋ณต๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์๋ฌผ ์ค ๊ฐ์ฅ ํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ผ.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
if __name__=='__main__':
n,m,k=map(int,sys.stdin.readline().split()) # ์ธ๋ก ๊ธธ์ด, ๊ฐ๋ก ๊ธธ์ด, ๊ฐ์
graph=[[0]*m for i in range(n)]
for i in range(k): # ์ขํ ์
๋ ฅ
r,c=map(int,sys.stdin.readline().split())
graph[r-1][c-1]=1
area=[]
dx=[-1,1,0,0] # ์ํ์ข์ฐ
dy=[0,0,-1,1]
for i in range(n):
for j in range(m):
if graph[i][j]==1:
queue=deque([[i,j]])
graph[i][j]=0
cnt=1
while queue:
temp=queue.popleft()
for r in range(4):
x=temp[0]+dx[r]
y=temp[1]+dy[r]
if x>=0 and x<n and y>=0 and y<m: # ์ขํ ๋ฒ์ ์
if graph[x][y]==1:
graph[x][y]=0
queue.append([x,y])
cnt+=1 # ํฌ๊ธฐ +1
area.append(cnt)
print(max(area)) # ๊ฐ์ฅ ํฐ ๊ฐ ์ถ๋ ฅ
- my solution (JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class _1743_์์๋ฌผํผํ๊ธฐ {
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String s=bf.readLine();
int n=Integer.parseInt(s.split(" ")[0]); // ์ธ๋ก ๊ธธ์ด
int m=Integer.parseInt(s.split(" ")[1]); // ๊ฐ๋ก ๊ธธ์ด
int k=Integer.parseInt(s.split(" ")[2]); // ๊ฐ์
int graph[][]=new int[n][m];
for(int i=0; i<k; i++) { // ์ขํ ์
๋ ฅ
s=bf.readLine();
int r=Integer.parseInt(s.split(" ")[0]);
int c=Integer.parseInt(s.split(" ")[1]);
graph[r-1][c-1]=1;
}
int dx[]= {-1,1,0,0}; // ์ํ์ข์ฐ
int dy[]= {0,0,-1,1};
int max_area=0; // ๊ฐ์ฅ ํฐ ๊ฐ
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(graph[i][j]==1) {
Queue<int[]>queue=new LinkedList<>();
queue.add(new int[] {i,j});
graph[i][j]=0;
int cnt=1;
while(queue.size()!=0) {
int temp[]=queue.poll();
for(int r=0; r<4; r++) {
int x=temp[0]+dx[r];
int y=temp[1]+dy[r];
if(x>=0 && x<n && y>=0 && y<m) { // ์ขํ ๋ฒ์ ์
if(graph[x][y]==1) {
graph[x][y]=0;
cnt+=1;
queue.add(new int[] {x,y});
}
}
}
}
if(max_area<cnt) {
max_area=cnt;
}
}
}
}
System.out.println(max_area);
}
}
์์๋ฌผ์ด ๋จ์ด์ง ์ขํ์ ๋ง๊ฒ 1๋ก ํ์ํด์ค๋๋ค. ๊ทธ ํ ์ขํ๋ฅผ ๋ค ํ์ํ์ฌ ์์๋ฌผ์ด ๋จ์ด์ ธ ์๋ค๋ฉด ( = ๊ฐ์ด 1์ด๋ผ๋ฉด ) ๊ทธ ์ฃผ๋ณ์ ํ์ํ๋๋ก ํด์ค๋๋ค. ์ํ์ข์ฐ๋ฅผ ํ์ํ์ฌ ์์๋ฌผ์ด ๋จ์ด์ ธ ์๋ค๋ฉด ๊ณ์ํด์ ํ์ํ์ฌ ์ฃผ๋ณ์ ์์๋ฌผ์ด ์์ ๋๊น์ง ํ์ธํด์ค๋๋ค. ์์๋ฌผ์ ํฌ๊ธฐ ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํด์ค๋๋ค.
- ์ธ๋ก ๊ธธ์ด (n), ๊ฐ๋ก๊ธธ์ด (m), ์์๋ฌผ ์ฐ๋ ๊ธฐ์ ๊ฐ์ (k) ์ ๋ ฅ
- graph = ์ขํ ( ์์๋ฌผ ์ฐ๋ ๊ธฐ ํ์ )
- area = ์์๋ฌผ์ ํฌ๊ธฐ ์ ์ฅ
- ์ขํ๋ฅผ ํ์ธํ๋ฉฐ graph ์นธ์ด 1์ด๋ผ๋ฉด ์์๋ฌผ์ด ์๋ค๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ ์ฃผ๋ณ์ ํ์ธ -> ์ํ์ข์ฐ๋ฅผ ํ์ธํ์ฌ ์ขํ ๋ฒ์ ์์ด๋ฉฐ ๊ทธ ์นธ์๋ ์์๋ฌผ ์ฐ๋ ๊ธฐ๊ฐ ์๋ค๋ฉด ํฌ๊ธฐ + 1 -> ๊ณ์ํด์ ํ์ธํ์ฌ ๋ชจ๋ ์ขํ๋ฅผ ํ์ธํ๋๋ก ํด์ค๋ค.
- ์์๋ฌผ ์ฐ๋ ๊ธฐ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ ๊ฐ์ area์ ์ ์ฅ
- area์ ์ ์ฅํ ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅ
์๊ฐ๐ค
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1303_์ ์ - ์ ํฌ (0) | 2022.04.26 |
---|---|
[Baekjoon] 1747_์์&ํฐ๋ฆฐ๋๋กฌ (0) | 2022.04.25 |
[Baekjoon] 1926_๊ทธ๋ฆผ (0) | 2022.04.20 |
[Baekjoon] 12851_์จ๋ฐ๊ผญ์ง 2 (0) | 2022.04.18 |
[Baekjoon] 16948_๋ฐ์ค ๋์ดํธ (0) | 2022.04.15 |