https://www.acmicpc.net/problem/2738
2738번: 행렬 덧셈
첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, M;
scanf("%d%d", &N, &M);
int** A = (int**)malloc(sizeof(int*) * N);
for (int i = 0; i < N; i++) {
A[i] = (int*)malloc(sizeof(int) * M);
} //A행렬 동적할당
int** B = (int**)malloc(sizeof(int*) * N);
for (int i = 0; i < N; i++) {
B[i] = (int*)malloc(sizeof(int) * M);
} //B행렬 동적할당
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &A[i][j]);
}
} //A행렬 채우기
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &B[i][j]);
}
} //B행렬 채우기
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
A[i][j] += B[i][j];
printf("%d ", A[i][j]);
}
printf("\n");
}
for (int i = 0; i < N; i++) {
free(A[i]);
free(B[i]);
} //동적할당 받은 이차원배열의 해제
free(A); free(B);
return 0;
}
내 교육과정부터 행렬이 고등수학에서 빠졌었는데 정말 오랜만에 다시 보는 이름이다.
문제에서 N과 M은 100보다 작거나 같은 정수이기 때문에 이차원 배열의 크기를 N과 M으로 선언해주어도 좋다.
하지만 간만에 동적할당 하고 싶었다.
코드 자체는 어려운 것이 없다. 두 번 동적할당 해주어 요소들을 정의해주고 더한 뒤 출력해주면 된다.
배열의 크기는 언제나 컴파일 시간에 확정 되어야 한다. 따라서 배열의 크기를 변수로 선언해줄 수가 없다.따라서 C언어에서 우리는 동적 할당을 위해 malloc 함수를 사용함으로써 변수로 배열의 크기를 선언해 줄 수 있는데
이차원 배열의 동적할당에서 중요한 점은
메모리가 쓸데없이 자리를 차지하지 않도록 즉 메모리 누수 방지를 위해 해제해주는 것이다.
malloc 함수는 힙(heap)을 이용하는데 메모리의 힙 부분은 사용자가 자유롭게 할당하거나 해제할 수 있다.
할당과 해제가 자유로운 만큼 컴퓨터가 알아서 처리하는 것이 아닌 인간이 다루는 만큼 철저히 해야한다!
36~40번째 줄에 해당한다.
힙 메모리에 대해 더 알고 싶다면
https://developer-dz.tistory.com/22
프로그램 메모리 세그먼트
세그먼트 방식은 가상 주소인 논리적 주소를 활용하여 상대적인 위치를 지정하고 offset(시작주소)을 더하여 물리적인 주소로 접근한다. 이를 통해 CPU가 프로세스는 연속된 메모리에 위치하구나
developer-dz.tistory.com
#include <stdio.h>
main()
{
int n,m,x[100][100],i,j,y;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&x[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&y);
printf("%d ",x[i][j]+y);
}
printf("\n");
}
}
재밌는 코드다. 무려 7년전 kjo7811님의 코드인데 정말 재밌다고 느꼈다. 나도 저렇게 짜고 싶다!
'Baekjoon' 카테고리의 다른 글
[C] 백준 2090번 : 골드바흐의 추측 (2) | 2023.01.31 |
---|---|
[C]백준 2566번 : 최댓값 (0) | 2023.01.29 |
[C] 백준 1929번 : 소수 구하기 (0) | 2023.01.27 |
[C] 백준 11653번 : 소인수분해 (0) | 2023.01.27 |
[C] 백준 2581번 : 소수 (0) | 2023.01.26 |