๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2468)
<์์ ์์ญ>
๋ฌธ์
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ด ์ต๋๋ก ๋ช ๊ฐ๊ฐ ๋ง๋ค์ด์ง๋ ์ง๋ฅผ ์กฐ์ฌํ๋ ค๊ณ ํ๋ค. ์ด๋, ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํ์ฌ, ์ฅ๋ง์ฒ ์ ๋ด๋ฆฌ๋ ๋น์ ์์ ๋ฐ๋ผ ์ผ์ ํ ๋์ด ์ดํ์ ๋ชจ๋ ์ง์ ์ ๋ฌผ์ ์ ๊ธด๋ค๊ณ ๊ฐ์ ํ๋ค.
์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ ํ๊ณผ ์ด์ ํฌ๊ธฐ๊ฐ ๊ฐ๊ฐ N์ธ 2์ฐจ์ ๋ฐฐ์ด ํํ๋ก ์ฃผ์ด์ง๋ฉฐ ๋ฐฐ์ด์ ๊ฐ ์์๋ ํด๋น ์ง์ ์ ๋์ด๋ฅผ ํ์ํ๋ ์์ฐ์์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ N=5์ธ ์ง์ญ์ ๋์ด ์ ๋ณด์ด๋ค.
์ด์ ์์ ๊ฐ์ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ค์ ๋์ด๊ฐ 4 ์ดํ์ธ ๋ชจ๋ ์ง์ ์ด ๋ฌผ์ ์ ๊ฒผ๋ค๊ณ ํ์. ์ด ๊ฒฝ์ฐ์ ๋ฌผ์ ์ ๊ธฐ๋ ์ง์ ์ ํ์์ผ๋ก ํ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ด๋ผ ํจ์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์ง์ ๋ค์ด ์, ์๋, ์ค๋ฅธ์ชฝ ํน์ ์ผ์ชฝ์ผ๋ก ์ธ์ ํด ์์ผ๋ฉฐ ๊ทธ ํฌ๊ธฐ๊ฐ ์ต๋์ธ ์์ญ์ ๋งํ๋ค. ์์ ๊ฒฝ์ฐ์์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ 5๊ฐ๊ฐ ๋๋ค(๊ผญ์ง์ ์ผ๋ก๋ง ๋ถ์ด ์๋ ๋ ์ง์ ์ ์ธ์ ํ์ง ์๋๋ค๊ณ ์ทจ๊ธํ๋ค).
๋ํ ์์ ๊ฐ์ ์ง์ญ์์ ๋์ด๊ฐ 6 ์ดํ์ธ ์ง์ ์ ๋ชจ๋ ์ ๊ธฐ๊ฒ ๋ง๋๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ฉด ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ์๋ ๊ทธ๋ฆผ์์์ ๊ฐ์ด ๋ค ๊ฐ๊ฐ ๋จ์ ํ์ธํ ์ ์๋ค.
์ด์ ๊ฐ์ด ์ฅ๋ง์ฒ ์ ๋ด๋ฆฌ๋ ๋น์ ์์ ๋ฐ๋ผ์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ๊ฐ์๋ ๋ค๋ฅด๊ฒ ๋๋ค. ์์ ์์ ๊ฐ์ ์ง์ญ์์ ๋ด๋ฆฌ๋ ๋น์ ์์ ๋ฐ๋ฅธ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ์กฐ์ฌํด ๋ณด๋ฉด ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ๊ฐ์ ์ค์์ ์ต๋์ธ ๊ฒฝ์ฐ๋ 5 ์์ ์ ์ ์๋ค.
์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ฅ๋ง์ฒ ์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ด๋ค ์ง์ญ์ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด์ ํ๊ณผ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 2 ์ด์ 100 ์ดํ์ ์ ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ๊ฐ ์ค์๋ 2์ฐจ์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ๋ถํฐ N๋ฒ์งธ ํ๊น์ง ์์๋๋ก ํ ํ์ฉ ๋์ด ์ ๋ณด๊ฐ ์ ๋ ฅ๋๋ค. ๊ฐ ์ค์๋ ๊ฐ ํ์ ์ฒซ ๋ฒ์งธ ์ด๋ถํฐ N๋ฒ์งธ ์ด๊น์ง N๊ฐ์ ๋์ด ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์์ฐ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ ๋ ฅ๋๋ค. ๋์ด๋ 1 ์ด์ 100 ์ดํ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฅ๋ง์ฒ ์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
def safe(visited, a,b):
dx=[-1,1,0,0] # ์ํ์ข์ฐ
dy=[0,0,-1,1]
queue=deque([[a,b]])
while queue:
temp=queue.popleft()
for i in range(4):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if x>=0 and x<len(visited) and y>=0 and y<len(visited[0]): # ์ง์ญ ๋ฒ์ ์
if visited[x][y]==0: # ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด
queue.append([x,y])
visited[x][y]=1
if __name__=='__main__':
n=int(input())
arr=[]
height=[]
for i in range(n):
temp=list(map(int, sys.stdin.readline().split()))
arr.append(temp)
height+=temp
height=set(height) # ์ง์ญ์ ๋์ด
answer=1 # ์ ์ฒด ์ง์ญ์ด ๋ฌผ์ ์ ๊ธฐ์ง ์์ ๊ฒฝ์ฐ
for i in height:
cnt = 0
visited=[[0]*n for j in range(n)]
for j in range(n):
for k in range(n):
if arr[j][k]<=i: # i ๋์ด ์ดํ ์ง์
visited[j][k]=1 # ๋ฐฉ๋ฌธ o
for j in range(n):
for k in range(n):
if visited[j][k]==0: # ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด
cnt+=1 # ์์ ํ ์์ญ ๊ฐ์
safe(visited, j, k)
if answer<cnt: # ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์
answer=cnt
print(answer)
- my solution (JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
public class _2468_์์ ์์ญ {
static void safe(int visited[][], int a, int b) {
int dx[]= {-1,1,0,0}; // ์ํ์ข์ฐ
int dy[]= {0,0,-1,1};
Queue<int []> queue=new LinkedList<>();
queue.add(new int[]{a,b});
while(queue.size()!=0) {
int temp[]=queue.poll();
for(int i=0; i<4; i++) {
int x=temp[0]+dx[i];
int y=temp[1]+dy[i];
if(x>=0 && x<visited.length && y>=0 && y<visited[0].length) {
// ์ง์ญ ๋ฒ์ ์
if(visited[x][y]==0) { // ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด
queue.add(new int[] {x,y});
visited[x][y]=1; // ๋ฐฉ๋ฌธ
}
}
}
}
}
public static void main(String[] args) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
int n= Integer.parseInt(bf.readLine());
int arr[][]=new int[n][n];
HashSet<Integer> set=new HashSet<>();
for(int i=0; i<n; i++) { // ๋์ด ์ ๋ณด ์ ์ฅ
String str=bf.readLine();
for(int j=0; j<n; j++) {
int temp=Integer.parseInt(str.split(" ")[j]);
arr[i][j]=temp;
set.add(temp); // ์ง์ญ์ ๋์ด
}
}
int answer=1; // ์ ์ฒด ์ง์ญ์ด ๋ฌผ์ ์ ๊ธฐ์ง ์์ ๊ฒฝ์ฐ -> 1
for(int i:set) {
int cnt=0;
int visited[][]=new int[n][n];
for(int j=0; j<n; j++) {
for(int k=0; k<n; k++) {
if(arr[j][k]<=i) { // i ๋์ด ์ดํ ์ง์
visited[j][k]=1; // ๋ฐฉ๋ฌธ o
}
}
}
for(int j=0; j<n; j++) {
for(int k=0; k<n; k++) {
if(visited[j][k]==0) { // ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด
cnt+=1; // ์์ ํ ์์ญ ๊ฐ์
safe(visited,j,k);
}
}
}
if(answer<cnt) { // ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์
answer=cnt;
}
}
System.out.println(answer);
}
}
์ฃผ์ด์ง ์ง์ญ์ ๋์ด๋ค์ ์ ์ฅํ ํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณธ๋ค.
๊ฐ ๋์ด ์ดํ์ธ ์ง์ ์ ๋ชจ๋ ์ ๊ธฐ๊ฒ ๋ ๋ ์์ ํ ์์ญ์ ๊ฐ์๋ฅผ ์ฐพ๋๋ก ํด์ค๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ ๊ฐ์ฅ ๋ง์ ์์ ํ ์์ญ์ ์๋ฅผ ๋ต์ผ๋ก ์ถ๋ ฅํด์ค๋ค.
- safe
: dx, dy = ์ํ์ข์ฐ ํ์
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ํ์ข์ฐ ํ์ธํ์ฌ ์ง์ญ ๋ฒ์ ์์ด๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด queue์ ์ถ๊ฐ ๋ฐ ๋ฐฉ๋ฌธ check - main
: n ์ ๋ ฅ
: arr = ์ง์ญ ๋์ด ์ ๋ณด ์ ์ฅ
: height = set์ ํ์ฉํ์ฌ ์ค๋ณต๋์ง ์๊ฒ ๋์ด ์ ์ฅ
: answer = ์ ์ฒด ์ง์ญ์ด ๋ฌผ์ ์ ๊ธฐ์ง ์์ ๊ฒฝ์ฐ -> 1๋ก ์ค์
: height => ๋์ด ์ดํ ์ง์ ์ ๋ฐฉ๋ฌธํ ๊ฒ์ผ๋ก ํ์ => ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด ์์ ํ ์์ญ ๊ฐ์(cnt) +1, ํจ์ ํธ์ถ => answer๋ณด๋ค cnt ๊ฐ์ด ๋ ํฌ๋ฉด answer= cnt
: answer ์ถ๋ ฅ
์๊ฐ๐ค
๋ฌธ์ ์์ ์๋ฌด ์ง์ญ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์๋ ์๋ค ์ด ๋ถ๋ถ์ ๋ช ๋ฒ์ด๋ ๋ดค์ผ๋ฉด์ ๋ฐ๋ ๋ฅผ ์ฐพ์๋ด์ง ๋ชปํ๋ค.
์ ๋ง ๋ป์ ์๋ฌด ์ง์ญ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์์์ ๋ ์์ ํ ์ง์ญ์ ๊ฐ์๊ฐ 1์ด ๋ ์ ์๋ค๋ ๋ง์ด์๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1697_์จ๋ฐ๊ผญ์ง (0) | 2022.04.05 |
---|---|
[Baekjoon] 7562_๋์ดํธ์ ์ด๋ (0) | 2022.04.04 |
[Baekjoon] 2178_๋ฏธ๋ก ํ์ (0) | 2022.03.31 |
[Baekjoon] 6198_์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ (0) | 2022.03.29 |
[Baekjoon] 2493_ํ (0) | 2022.03.28 |