티스토리 뷰

int a[1024][1024];
int loop(int n, int i, int j) {
	if(n==1) {
		return a[i][j];
	} else {
		n>>=1;
		int x,y,z,t;
		x=loop(n,i,j);
		y=loop(n,i+n,j);
		z=loop(n,i,j+n);
		if(x>y) {t=x;x=y;y=t;}
		if(x>z) {y=x;x=z;}
		else if(y>z) y=z;
		z=loop(n,i+n,j+n);
		if(x>z) {y=x;x=z;}
		else if(y>z) y=z;
		return y;
	}
}
int main() {
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]);
	printf("%d",loop(n,0,0));
}

 

풀이 : 재귀, 분할정복

 

loop을 이용합니다.

n >=2 즉 2*2 matrix 까지는 네 곳에 있던 값 중 두번째로 작은 값을 구해서 반환합니다.

n == 1 인 경우 입력받은 데이터를 반환합니다. 이는 비교를 위해 가져오는 것 입니다.

 

https://www.acmicpc.net/problem/24460

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함