백준 문제 풀이 10828 (스택)

c0wb3ll ㅣ 2019. 12. 23. 21:36

백준 문제 풀이 10828 (스택)

백준 문제 풀이 스택

test = int(input()) 		# 명령어 갯수 입력
stack = [] 			# 스택이라는 빈 리스트 생성

for i in range(test):	 	# 명령어 갯수 입력 받은 만큼 루프
    cmd = input().split() 	# cmd 입력
    if cmd[0] == 'push':	# 만약 push 라면
        stack.append(cmd[1]) 	# 스택에 값 추가
    if cmd[0] == 'top': 	# top 이고
        if stack == []: 	# 스택이 비어있으면
            print("-1")	 	# -1 출력
        else: 		  	# 아니면 
            print(stack[-1]) 	# 스택 맨 뒷 값 출력
    if cmd[0] == 'pop': 	# pop 이고
        if stack == []: 	# 스택이 비어있으면
            print("-1") 	# -1 출력
        else: 		   	# 아니면
            print(stack.pop()) 	# 스택에서 마지막값 pop 하고 출력
    if cmd[0] == 'size': 	# size 이면
        print(len(stack)) 	# 스택의 저장되 있는 값 갯수 출력
    if cmd[0] == 'empty': 	# empty 이고
        if stack == []: 	# 스택이 비어있으면
            print("1") 		# 1 출력
        else:		  	# 아니면
            print("0") 		# 0 출력

처음 문제를 보자마자 아! 리스트에 append 와 pop 을 이용해서 스택을 구현하면 편하겠구나 싶어서 바로 코드를 짜봤다.

헤맨 부분은 push는 인자가 필요한데 입력을 어떻게 받지.....? <-- 이거였다.

이 부분은 cmd 또한 리스트로 입력을 받아 인덱스 번호를 부여하면서 해결 되었다.

실행 결과 구현은 되었지만 백준에서 시간초과로 통과를 시켜주지 않는다....

미궁일세... 풀리지 않아 ㅠㅠ


알아보니 시간제한이 0.6 에서 0.5로 줄었다는 군요 ㅠㅠ 내 코드도 통과 시켜 달라 ㅠㅠ C언어로 준비해 와야겠습니다.


2019/12/24

image

하핳 하하하하하핳 나도 0.6초 마렵다 ㅎ

imageimage

파이썬이 극도로 느리기 때문에 입력에서라도 속도를 높이기 위해 sys.stdin.readline() 을 사용하라고 합니다.

import sys 

stack = [] 
test = int(sys.stdin.readline().strip()) 

for i in range(test): 
    cmd = sys.stdin.readline().strip().split() 
    if cmd[0] == 'push': 
        stack.append(cmd[1])
    elif cmd[0] == 'pop':
        if not stack:
            print(-1)
        else:
            print(stack.pop())
    elif cmd[0] == 'size':
        print(len(stack))
    elif cmd[0] == 'empty':
        if not stack:
            print(1)
        else:
            print(0)
    elif cmd[0] == 'top':
        if not stack:
            print(-1)
        else:
            print(stack[-1])
            
    # 그냥 input().split() 에서 sys.stdin.readline().strip().split()
    # 으로 바뀐거 밖에 음슴
    # sys.stdin.readline().strip().split()
    # sys ) system 함수
    # stdin ) 표준 입력
    # readline() ) 입력을 읽어옴(?)
    # strip() )  문자열의 양 끝 쓸데없이 읽어온 공백 제거
    # split() ) 공백을 기준으로 인자 나눔

하아;;; 이거 찾는다고 몇시간을 헤맨거야; ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 0.1초 차이가 너무 크다