문제 요약 (Integer Command Processing 5)
정수들을 저장하는 동적 배열 하나를 두고, 총 N개의 명령을 순서대로 처리하는 문제.
명령 종류는 4가지:
push_back A: 정수A를 배열의 맨 뒤에 추가pop_back: 배열의 마지막 정수 제거size: 배열에 들어있는 정수 개수 출력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_back→arr.append(num[i])pop_back→arr.pop()size→len(arr)출력get→arr[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
이전링크드 리스트