만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

가변 배열

면접 대비

시간 제한1초메모리 제한1024 MB

요약
저장과 삭제 명령을 차례로 처리하고, 가득 차면 크기가 두 배로 늘어나는 동적 배열의 최종 최대 크기를 구합니다.
난이도

쉬움10점 중 2점

유형
구현, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

여러분은 가변 배열에 대해 알고 있나요? 아직 잘 모른다면, 아마 배열을 고정된 크기로 선언해 왔을 것입니다. 배열의 크기가 부족해서 원하지 않는 채점 결과를 받아 본 적도 한 번쯤 있을 것입니다. 가변 배열은 선언한 크기가 부족하면 크기를 자동으로 늘립니다. 아래에서 그 원리를 살펴봅니다.

가변 배열은 다음과 같이 동작합니다.

  1. 원하는 초기 크기를 지정해 가변 배열을 만듭니다. 이때 가변 배열은 비어 있는 상태입니다.
  2. 원소를 저장해야 하는데 가변 배열이 꽉 차 있으면, 현재 크기의 22배에 해당하는 새 가변 배열을 선언합니다.
  3. 새로 만든 22배 크기의 가변 배열 맨 앞에 기존 가변 배열의 원소를 모두 복사합니다. 그다음 기존 배열을 지우고 새 배열로 대체합니다. 2번에서 저장하려던 원소는 복사한 원소 뒤에 저장합니다.

이를 위해 가변 배열은 두 변수를 관리합니다. SS는 현재 최대 크기이고, UU는 현재 사용 중인 크기입니다.

가변 배열의 초기 크기와 원소를 저장하거나 삭제하는 명령들이 주어졌을 때, 모든 명령을 수행한 후 가변 배열의 최대 크기를 출력하세요.

입력

첫 번째 줄에 공백으로 구분된 정수 S_0S\_0, NN, MM이 주어집니다. S_0S\_0은 초기 최대 크기, NN은 원소를 저장하는 명령의 개수, MM은 원소를 삭제하는 명령의 개수입니다. (1≤S_0≤10,  1≤N≤100 000,  0≤M≤N)(1 \le S\_0 \le 10, \; 1 \le N \le 100\,000, \; 0 \le M \le N)

두 번째 줄부터 N+M+1N + M + 1번째 줄까지 한 줄에 1 또는 0이 하나씩 주어집니다. 1은 배열에 원소를 저장하는 명령이고, 0은 배열의 끝에서 원소를 삭제하는 명령입니다.

가변 배열에 저장된 원소가 없을 때 삭제 명령이 주어지는 경우는 없습니다.

출력

모든 명령을 처리한 후 가변 배열의 최대 크기를 출력합니다.

힌트

대표적인 가변 배열의 예시로 C++의 vector가 있습니다.

예제1

  1. 예제 1

    입력
    1 5 1
    1
    1
    1
    1
    0
    1
    
    예상 출력
    4