c언어/BAEKJOON
c언어 24460번 특별상이라도 받고 싶어 (백준)
rofn123
2025. 3. 14. 04:35
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 인 경우 입력받은 데이터를 반환합니다. 이는 비교를 위해 가져오는 것 입니다.