본문 바로가기

코린이의 성장기/코린이의 백준 도전기

코린이의 백준 도전기 3일차

2023년 4월 29일 토요일

 

이번주 평일은 자바 과제하느라 바빠서 안푼 날도 있고, 많아야 한문제 풀었던 것 같다

오랜만에 휴일이니까 다시 시작!

 

 

2738번 문제

 

2차원 행렬 덧셈이었는데

처음에 시도한 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int n, m;
    scanf("%d %d", &n, &m);

    int A[n][m];
    int B[n][m];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &B[i][j]);
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int sum = A[i][j] + B[i][j];
            printf("%d ", sum);
        }
        printf("\n");
    }

    return 0;
}

이게 백준에서는 되는데 visual studio에서는 안되는 이유가 알고 싶다...
그래서 동적 할당을 이용하여 2차원 배열을 생성해보았다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int n, m;
    scanf("%d %d", &n, &m);

    int** A = (int**)malloc(n * sizeof(int*));
    int** B = (int**)malloc(n * sizeof(int*));

    for (int i = 0; i < n; i++) {
        A[i] = (int*)malloc(m * sizeof(int));
        for (int j = 0; j < m; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    for (int i = 0; i < n; i++) {
        B[i] = (int*)malloc(m * sizeof(int));
        for (int j = 0; j < m; j++) {
            scanf("%d", &B[i][j]);
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int sum = A[i][j] + B[i][j];
            printf("%d ", sum);
        }
        printf("\n");
    }

    // 할당된 메모리 해제
    for (int i = 0; i < n; i++) {
        free(A[i]);
        free(B[i]);
    }
    free(A);
    free(B);

    return 0;
}

 

2566번 문제

2차원 배열의 최댓값

1차원 배열 때의 최댓값과 방금 전  풀었던 문제를 응용해서 풀었다

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int A[9][9];
    
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    int max;
    int check = 0;
    int check1 = 0;
    max = A[0][0];
    
    for (int i = 0; i < 9; i++) {
        for(int j = 0; j<9;j++){
            if (max < A[i][j]) {
                max = A[i][j];
                check = i;
                check1 = j;
            }
        }

    }


    printf("%d\n%d %d", max, check + 1,check1 + 1);
    return 0;
}

10798번 문제

세로읽기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_SIZE 15
char str_read[5][MAX_SIZE];
int main(void) {
for (int i = 0; i < 5; i++) {
scanf("%s", str_read[i]);
}
for (int j = 0; j < MAX_SIZE; j++) {
for (int i = 0; i < 5; i++) {
if (str_read[i][j] == NULL)
continue;
else
printf("%c", str_read[i][j]);

}

}

return 0;
}

2563번

색종이 문제

어떻게 해야할지 알겠는데 정작 코드로 그걸 구현하기가 힘들다.. 음...