C++ 알고리즘 풀이 시, 2차원 배열 선언 방법과 각각의 특징에 대해 설명해보려 한다. 실행 중 배열 크기를 결정할 수 있는 동적 벡터 방식과 컴파일 시 크기를 고정하는 정적 배열 방식이 있다.
vector 이용
// R*C 크기의 2차원 vector
vector<vector<int> > board(R, vector<int>(C));
// a*b*c 크기의 3차원 vector
vector<vector<vector<int> > > board(a, vector<vector<int>>(b, vector<int>(c)));
vector는 C++의 STL에서 제공하는 동적 배열로, 위 방법은 배열의 크기를 동적으로 설정하여 2차원 벡터를 생성하는 방식이다. 배열의 크기를 프로그램이 실행될 때 결정할 수 있기 때문에 유연성이 높다. 불필요한 초과 할당이 발생하지 않아 메모리 효율성이 좋다.
하지만 속도 측면에서 vector는 동적 메모리 할당과 메모리 관리에 추가적인 오버헤드가 발생할 수 있다. 또한 다차원 배열을 선언할 때 정적 배열에 비해 문법이 조금 더 복잡하다.
배열 이용
const int MAX_SIZE = 1000;
int board[MAX_SIZE][MAX_SIZE];
위 방법은 정적 크기의 2차원 배열을 생성하는 방식으로, 배열의 크기를 컴파일 시간에 미리 고정해 놓는다. 크기를 미리 지정해야 하지만, 메모리 할당이 컴파일 시 결정되므로 동적할당에 비해 빠르고 추가적인 메모리 관리 오버헤드가 없다.
하지만 배열 크기를 미리 고정해야 하므로 메모리를 낭비할 가능성이 있다. 최대 크기보다 작게 사용하면 불필요한 메모리를 차지하게 된다. 매우 큰 배열을 사용할 경우, 스택 메모리 제한을 초과할 수도 있다.
'C++' 카테고리의 다른 글
구조체와 공용체의 차이 (3) | 2024.10.13 |
---|---|
[C++] 나눗셈에서 소수점 포함하기 (0) | 2024.10.08 |
[C++] 시간초과 해결방법 (1) | 2024.09.20 |