벡터

 

문제 요약 (Integer Command Processing 5)

정수들을 저장하는 동적 배열 하나를 두고, 총 N개의 명령을 순서대로 처리하는 문제.

명령 종류는 4가지:

  1. push_back A : 정수 A를 배열의 맨 뒤에 추가
  2. pop_back : 배열의 마지막 정수 제거
  3. size : 배열에 들어있는 정수 개수 출력
  4. get k : 배열의 k번째(1부터 시작) 정수 출력

문제에서 불가능한 명령은 주어지지 않는다고 했으므로,
빈 배열에서 pop_back 또는 범위를 벗어나는 get 같은 건 고려하지 않아도 됨.

입력 형식은 이미 다음과 같이 파싱되어 있음:

N = int(input())

command = []
num = []

for _ in range(N):
    line = input().split()
    command.append(line[0])
    if line[0] == "push_back" or line[0] == "get":
        num.append(int(line[1]))
    else:
        num.append(0)

풀이 아이디어

  • 파이썬 리스트 하나(arr)를 동적 배열처럼 사용
  • command[i] / num[i]를 순서대로 보면서
    • push_backarr.append(num[i])
    • pop_backarr.pop()
    • sizelen(arr) 출력
    • getarr[num[i] - 1] 출력 (1-index → 0-index 변환)

시간 복잡도: 각 명령을 한 번씩만 처리 → O(N)


전체 코드

N = int(input())

command = []
num = []

for _ in range(N):
    line = input().split()
    command.append(line[0])
    if line[0] == "push_back" or line[0] == "get":
        num.append(int(line[1]))
    else:
        num.append(0)

# 동적 배열
arr = []

for i in range(N):
    cmd = command[i]
    x = num[i]

    if cmd == "push_back":
        arr.append(x)
    elif cmd == "pop_back":
        arr.pop()
    elif cmd == "size":
        print(len(arr))
    elif cmd == "get":
        print(arr[x - 1])  # k는 1부터 시작하므로 x-1