https://www.acmicpc.net/problem/2738
2차원 배열을 이용하는 문제이다.
n과 m의 범위가 100 이하이므로 굳이 동적할당을 할 필요는 없지만 연습을 위해 동적할당을 써 보았다.
2차원 배열은 배열의 배열로 이해할 수 있다는 점을 이용하여 구현할 수 있다.
즉 포인터 배열을 만들고, 각각의 원소들이 또 다른 배열을 가리키도록 하여 구현할 수 있다.
(물론 실제 2차원 배열의 메모리는 연속된 주소 값을 갖기 때문에 이렇게 구현한 것과 완전히 같다고는 할 수 없다. 비슷한 기능을 하도록 구현할 뿐이다.)
또한 동적할당을 통해 2차원 배열을 구현할 때에는 메모리 누수가 일어나지 않도록 주의해야 한다.
arr[i][j]가 있다면 arr[i]가 또 다른 배열의 이름이 되기 때문에(또 다른 배열을 가리키기 때문에) 이중으로 해제를 해 주어야 한다.
#include <iostream>
int main()
{
int n, m;
std::cin >> n >> m;
//행이 n, 열이 m인 2차원 배열의 구현
int** arr1 = new int* [n];
int** arr2 = new int* [n];
for (int i = 0; i < n; ++i)
{
arr1[i] = new int[m];
arr2[i] = new int[m];
}
for (int i = 0; i < n; ++i) //배열에 값 할당
{
for (int j = 0; j < m; ++j)
{
std::cin >> arr1[i][j];
}
}
for (int i = 0; i < n; ++i) //배열에 값 할당
{
for (int j = 0; j < m; ++j)
{
std::cin >> arr2[i][j];
}
}
for (int i = 0; i < n; ++i) //두 배열의 값 더하고 출력
{
for (int j = 0; j < m; ++j)
{
std::cout << arr1[i][j] + arr2[i][j] << ' ';
}
std::cout << '\n';
}
//메모리 해제
for (int i = 0; i < n; ++i)
{
delete[] arr1[i];
delete[] arr2[i];
}
delete[] arr1;
delete[] arr2;
}
'Computer > 알고리즘&백준' 카테고리의 다른 글
[백준][C++] 4949 균형잡힌 세상 (0) | 2022.11.29 |
---|---|
[백준][알고리즘][C++] 2750 수 정렬하기, 버블 정렬, 삽입 정렬 (0) | 2022.11.19 |
[백준] [C++] 11729 하노이 탑 이동 순서 (0) | 2022.11.15 |
[알고리즘] 시간복잡도와 공간복잡도, 빅-오(Big-Oh) 표기법 (0) | 2022.11.15 |
[백준] [C++] 9020 골드바흐의 추측 (0) | 2022.11.14 |