9455
#include <stdio.h>
#include <stdlib.h>
int main(void){
int test_case = 0;
scanf("%d", &test_case);
for(int t = 0; t < test_case; t++){
int row = 0, col = 0;
scanf("%d %d", &row, &col);
// 동적 메모리 할당하기 (2차원 배열)
// malloc(sizeof(int*)*row);
// (int*)< 이거 필수 안하면 런타임 에러 (Segfault) 떠요
int **box_arr = malloc(sizeof(int*)*row);
for(int k = 0; k < row; k++){
box_arr[k] = malloc(sizeof(int)*col);
}
// 박스 여부 입력 받기
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
scanf("%d", &box_arr[i][j]);
}
}
// 박스 이동하기
int count = 0;
for(int i = row-1; i >= 0; i--){
for(int j = col-1; j >= 0; j--){
// 만약 현재 박스가 있을 경우
if(box_arr[i][j]){
int swap_i = i;
// 박스 현재의 아래 행 부터 마지막 행까지
for(int z = i+1; z < row; z++){
// 만약 현재 자리에 박스가 있다면 break
if(box_arr[z][j]){
break;
}
// 현재 자리에 박스가 없으면
// swap할 인덱스 번호를 현재 인덱스로 바꾸고 count
else{
swap_i = z;
count++;
}
}
// 현재 자리의 박스를 0으로 바꾸고
// 바꿀 자리의 박스에 1으로 바꿔주기
box_arr[i][j] = 0;
box_arr[swap_i][j] = 1;
}
}
}
// 박스 이동 거리 출력
printf("%d\n", count);
// 메모리 해제 해주기
for(int k = 0; k < row; k++){
free(box_arr[k]);
}
free(box_arr);
}
return 0;
}

ㅎ 근데 참.... ㅎㅎ.... 4중 반복문 레전드긴해.. . ㅇㅇ;;;;
'백준' 카테고리의 다른 글
| [ 백준 / C ] 12778번 : CTP공국으로 이민 가자 (0) | 2025.11.17 |
|---|---|
| [ 백준 / C ] 13877번 : 이건 무슨 진법이지? (0) | 2025.11.14 |
| [ 백준 / C ] 23841번 : 데칼코마니 (0) | 2025.11.12 |
| [ 백준 / C ] 20332번 : Divvying Up (0) | 2025.11.11 |
| [ 백준 / C ] 1003번 : 피보나치 함수 (0) | 2025.11.10 |