문제 링크 : https://www.acmicpc.net/problem/16967
맞힌 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
int h, w, x, y;
cin >> h >> w >> x >> y;
vector<vector<int>> a(h, vector<int>(w));
vector<vector<int>> b(h+x, vector<int>(w+y));
for (int i=0; i<h+x; i++){
for (int j=0; j<w+y; j++){
cin >> b[i][j];
}
}
for (int i=0; i<h; i++){
for (int j=0; j<w; j++){
if (i>=x && j>=y){
a[i][j] = b[i][j] - a[i-x][j-y];
}
else{
a[i][j] = b[i][j];
}
}
}
for (int i=0; i<h; i++){
for (int j=0; j<w; j++){
cout << a[i][j] << " ";
}
}
}
메모
array가 아닌 vector를 사용하는 것이 더 적절한 이유 (GPT 답변)
vector를 사용하는 것이 array(C 스타일의 배열)보다 더 적절한 선택입니다. 그 이유는 다음과 같습니다.
1. 동적 크기 할당
- vector는 동적 크기 할당이 가능하므로 크기를 미리 결정할 필요 없이 유연하게 사용 가능합니다.
- 반면, array는 크기를 컴파일 타임에 정해야 하므로, H와 W가 런타임에 주어지는 경우 vector가 더 적합합니다.
2. 메모리 안전성
- vector는 자동으로 메모리를 관리하며, 범위를 벗어난 접근을 방지하는 at() 메서드를 제공합니다.
- C 스타일 배열은 직접 메모리를 관리해야 하며, 범위를 벗어난 접근 시 오류가 발생해도 경고 없이 프로그램이 예상치 못한 동작을 할 수 있습니다.
3. 편의성
- vector는 size() 함수를 제공하여 배열 크기를 쉽게 확인할 수 있습니다.
- 또한, resize()를 이용해 크기를 조정할 수도 있습니다.
- C 스타일 배열을 사용할 경우 크기를 직접 추적해야 하며, 크기 변경도 어렵습니다.
4. 표준 라이브러리 기능 활용 가능
- vector는 C++ 표준 라이브러리의 다양한 알고리즘(sort(), find(), accumulate() 등)과 함께 쉽게 사용할 수 있습니다.
- 반면, C 스타일 배열은 이러한 기능을 사용하기 위해 더 많은 수작업이 필요합니다.
5. 자동 소멸 및 메모리 관리
- vector는 스코프를 벗어나면 자동으로 메모리를 해제해줍니다.
- 반면, new로 동적으로 할당한 배열(int* arr = new int[N];)은 delete[] arr;을 명시적으로 호출해야 하며, 그렇지 않으면 메모리 누수가 발생할 수 있습니다.
결론
배열의 크기가 런타임에 결정되며, 메모리 관리가 필요하고, 안전성이 중요한 경우 vector가 훨씬 더 좋은 선택입니다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 42586번 기능개발 C++ (0) | 2025.02.09 |
---|---|
[백준/BOJ] 14503번 로봇 청소기 C++ (0) | 2025.01.26 |
[백준/BOJ] 14888번 연산자 끼워넣기 C++ (0) | 2025.01.26 |
[백준/BOJ] 25757번 임스와 함께하는 미니게임 C++ (0) | 2025.01.23 |
[백준/BOJ] 2164번 카드2 C++ (0) | 2024.11.20 |