가변 배열
면접 대비시간 제한1초메모리 제한1024 MB
저장과 삭제 명령을 차례로 처리하고, 가득 차면 크기가 두 배로 늘어나는 동적 배열의 최종 최대 크기를 구합니다.
문제
여러분은 가변 배열에 대해 알고 있나요? 아직 잘 모른다면, 아마 배열을 고정된 크기로 선언해 왔을 것입니다. 배열의 크기가 부족해서 원하지 않는 채점 결과를 받아 본 적도 한 번쯤 있을 것입니다. 가변 배열은 선언한 크기가 부족하면 크기를 자동으로 늘립니다. 아래에서 그 원리를 살펴봅니다.
가변 배열은 다음과 같이 동작합니다.
- 원하는 초기 크기를 지정해 가변 배열을 만듭니다. 이때 가변 배열은 비어 있는 상태입니다.
- 원소를 저장해야 하는데 가변 배열이 꽉 차 있으면, 현재 크기의 배에 해당하는 새 가변 배열을 선언합니다.
- 새로 만든 배 크기의 가변 배열 맨 앞에 기존 가변 배열의 원소를 모두 복사합니다. 그다음 기존 배열을 지우고 새 배열로 대체합니다. 2번에서 저장하려던 원소는 복사한 원소 뒤에 저장합니다.
이를 위해 가변 배열은 두 변수를 관리합니다. 는 현재 최대 크기이고, 는 현재 사용 중인 크기입니다.
가변 배열의 초기 크기와 원소를 저장하거나 삭제하는 명령들이 주어졌을 때, 모든 명령을 수행한 후 가변 배열의 최대 크기를 출력하세요.
입력
첫 번째 줄에 공백으로 구분된 정수 , , 이 주어집니다. 은 초기 최대 크기, 은 원소를 저장하는 명령의 개수, 은 원소를 삭제하는 명령의 개수입니다.
두 번째 줄부터 번째 줄까지 한 줄에 1 또는 0이 하나씩 주어집니다. 1은 배열에 원소를 저장하는 명령이고, 0은 배열의 끝에서 원소를 삭제하는 명령입니다.
가변 배열에 저장된 원소가 없을 때 삭제 명령이 주어지는 경우는 없습니다.
출력
모든 명령을 처리한 후 가변 배열의 최대 크기를 출력합니다.
힌트
대표적인 가변 배열의 예시로 C++의 vector가 있습니다.