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중 반복문 레전드긴해.. . ㅇㅇ;;;; 

+ Recent posts