* 언어선택
파이썬을 사용해서 풀기로 하였다. 현재는 데이터분석직무를 생각하고 있기 때문에 python에 익숙해지는 것이 좋다고 생각한다.
* 문제 해설
이 문제는 알고리즘 분류 '자료구조'에 해당한다.
문제이름과 같이 스택에 관한 문제다. 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하라는 문제로
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
이 다섯가지 명령을 처리할수 있도록 코드를 작성해야한다.
* 입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
조건은 전부 파악했다. 첫줄에서 입력받은 n으로 for문을 돌리면서 입력을 받으면 될것이다.
* 내 코드
import sys
n = int(input())
stack=[]
for i in range(n):
command = sys.stdin.readline().split()
if command[0]=='push':
stack.append(command[1])
elif command[0]=='pop':
if len(stack)==0:
print(-1)
else:
print(stack.pop())
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[-1])
input() 을 통해 숫자를 입력받았고 sys.stdin.readline()을 통해 나머지 라인들을 입력받았다. input()만을 사용하면 시간초과로 인해 정답이 아니게 된다. 처음엔 input()만을 사용했으나 구글링결과 sys.stdin.readline()을 알게 되었다.
또한, python에는 따로 스택구조가 없는것으로 판단되어 리스트를 이용해 스택구조를 구현하였다.
*핵심 사항
반복문으로 여러줄을 입력받을 경우에는 sys.stdin.readline() 을 사용해서 시간제한에 걸리지 않게 하자
'코딩테스트 > 백준' 카테고리의 다른 글
5. 백준 17219 (실버4) : 비밀번호 찾기 _ python풀이 (0) | 2024.08.13 |
---|---|
4. 백준 1764 (실버4) : 듣보잡 _ python풀이 (0) | 2024.08.10 |
3. 백준 1920 (실버4) : 수 찾기 _ python풀이 (0) | 2024.08.09 |
2. 백준 10816 (실버4) : 숫자 카드 2 _ python풀이 (0) | 2024.08.08 |
너무 오래 쉰 코드문제풀이 (0) | 2024.08.06 |