이제 단계별 스택단계다
스택은 가방에서 무언가를 넣고 꺼내는 개념으로 이해하면 쉽다
군대에서 총기손질할때 해체는 조립의 역순이라는 말이 있지않은가 딱 그것과 같다
스택개념은 처음이라 구글링을통해 개념을 잡는데 도움을 받았다
스택개념이 이미 어느정도 내가 나도 모르게 쓰고있었던것들이었다는게 신기했다
문제의 명령어들을
push 개념은 append
pop개념은 pop
구현해보았다
# import sys
# input=sys.stdin.readline
stack=[]
N=int(input())
for i in range(N):
ord=input()
if ord[-1].isdigit():
stack.append(int(ord[5:]))
elif ord=='pop':
if len(stack)==0:
print(-1)
else:
print(stack[-1])
stack.pop()
elif ord=='size':
print(len(stack))
elif ord=='empty':
if len(stack)==0:
print(1)
else:
print(0)
elif ord=='top':
if len(stack)==0:
print(-1)
else:
print(stack[-1])
시간초과도 아니고 틑렸습니다가 떳다 뭐지. 아하ㅏ하하 이렇게 하는게 아닌가?
원인의 발견
다행히도 코드가 잘못된것은 아니었다
질문게시판에서 틀린원인을 찾을수있었다
그리고 제출하자마자 바로 틀렸습니다가 뜬 이유도
sys.stdin.readline()은 input()과다르게 개행문자 \n도 같이 받아온다
그렇다고해도 정상적으로 정수 치환이 되는것을 확인할수있었다
import sys
name=sys.stdin.readline()
name=int(name)
if type(name)==int:
print('yes')
else:
print('no')
그래서 그동안 쓰면서 내가 딱히 문제점을 못느꼇던것같다
import sys
name=sys.stdin.readline()
if name[-1].isdigit():
print('yes')
else:
print('no')
이 코드를 비주얼스튜디오에서 실행시켜보면 no가 실행된다 (숫자 123을 입력했을때)
개행문자가 인덱싱되기때문에 올바르지 않은 결과가 나온것이다
그래서 공백을 제거하는 strip을 이용해 개행문자를 제거해주었더니 정답으로 처리되었다
요약
1. 정수화는 문제없이 잘됨
2. 개행문자가 끼는 바람에 인덱싱은 잘안됨
3. 앞으로 readline사용할때는 strip을 해주자
제출
import sys
input=sys.stdin.readline
stack=[]
N=int(input())
for i in range(N):
ord=input().strip()
if ord[-1].isdigit():
stack.append(int(ord[5:]))
elif ord=='pop':
if len(stack)==0:
print(-1)
else:
print(stack[-1])
stack.pop()
elif ord=='size':
print(len(stack))
elif ord=='empty':
if len(stack)==0:
print(1)
else:
print(0)
elif ord=='top':
if len(stack)==0:
print(-1)
else:
print(stack[-1])
백준 오큰수 파이썬 (0) | 2022.08.28 |
---|---|
백준 괄호 파이썬 (0) | 2022.08.25 |
백준 주유소 파이썬 (0) | 2022.08.21 |
백준 잃어버린 괄호 파이썬 (0) | 2022.08.20 |
백준 회의실 배정 파이썬 (0) | 2022.08.15 |