https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
나의 코드(성공)
N = int(input())
top = -1
stack = []
data = []
for n in range(N):
data.append(input().split())
for command in data:
if command[0] == 'push':
num = command[1]
top += 1
stack.append(int(num))
elif command[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
y = stack.pop()
top -= 1
print(y)
elif command[0] == 'size':
print(len(stack))
elif command[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif command[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[top])
결과

시간초과 코드 - 함수사용
def f(x):
if 'push' in x:
global top
num = command.split()[1]
top += 1
stack.append(int(num))
elif x == 'pop':
if len(stack) == 0:
print(-1)
else:
y = stack.pop()
top -= 1
print(y)
elif x == 'size':
print(len(stack))
elif x == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif x == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[top])
N = int(input())
top = -1
stack = []
for n in range(N):
command = input()
f(command)

시간초과코드 - 입력데이터를 읽으며 동작
N = int(input())
top = -1
stack = []
for n in range(N):
command = input()
if 'push' in command:
num = command.split()[1]
top += 1
stack.append(int(num))
elif command == 'pop':
if len(stack) == 0:
print(-1)
else:
y = stack.pop()
top -= 1
print(y)
elif command == 'size':
print(len(stack))
elif command == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif command == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[top])

처음에 함수를 써서 했는데 시간초과가 났다. 그래서 함수를 쓰지 않고 데이터를 받자마자 명령어에 따라 동작하도록 코드를 짰다. 그것도 시간초과가 났다. 그래서 다른 친구들의 코드를 봤는데 readline으로 해결했다. 한 명이 빈 리스트에 일단 명령어들을 넣어놓고 그 리스트를 돌며 동작을 수행하도록 코드를 짰다. 그래서 나도 그렇게 해서 해결했다. 근데 왜....? 분명 데이터를 읽자마자 동작을 하게 알고리즘을 짜야 코드도 짧아지고 수행시간도 짧아진다고 들었던 것 같다. 그걸 떠올리고 코드짜면서 나름 뿌듯했는데 왜이래...?? 스택은 진짜 다 알고 이거 쉬운편이라고 생각했는데 정답률 낮은 이유가 시간초과때문이었나?? 동작시간을 줄일 수 있는 방법들 빨리 배우고싶다. 이 문제가 뭐라고 한시간이 넘게 걸리는지 모르겠다ㅜㅜㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
'스터디 1일 1커밋' 카테고리의 다른 글
| 240219 [BOJ/백준] 18258. 큐 2 (0) | 2024.02.19 |
|---|---|
| 240218 [BOJ/백준] 1966. 프린터 큐 (0) | 2024.02.18 |
| 240214 [BOJ/백준] 1935. 후위 표기식2(+수정) (0) | 2024.02.14 |
| 240213 [BOJ/백준] 15649. N과 M(1) (1) | 2024.02.14 |
| 240212 [BOJ/백준] 2606. 바이러스 (+수정) (1) | 2024.02.13 |