백준 단계별문제/스택/ 파이썬 백준 1874 스택 수열
문제 : https://www.acmicpc.net/problem/1874
import sys
n = int(sys.stdin.readline())
arr = []
sign=[]
cnt = 1
for i in range(n):
num = int(sys.stdin.readline())
while cnt <= num: # 맨 처음에는 cnt숫자는 1부터니까 입력 들어온 숫자까지 반복문 돌려가며 리스트에 append해줌 / 그 다음 반복부터는 cnt와 num을 비교해가며 while문 실행 or 미실행 함
arr.append(cnt)
sign.append("+")
cnt += 1
if arr[-1] == num:
arr.pop()
sign.append("-")
else:
sign.append("NO")
if "NO" not in sign: # sign리스트에 NO가 없으면 그대로 부호만 출력
for s in sign:
print(s)
else:
print("NO") # NO가 있다면 NO출력
코린이라서 1시간 넘게 걸려서 푼 문제.. 처음에 노가다처럼 다 구해서 답은 나오는데
시간 초과라서 정답처리가 되지않아 위처럼 다시 풀었음ㅜㅜ
처음 풀이는 아래의 코드ㅋㅋㅋ 보기만해도 엄청 복잡해보임ㅋㅋㅋㅋ
처음 풀이. 리스트 arr는 pop이 일어나는 리스트고 stk는 원래 숫자들을 알기위해 append만 해주는 리스트
답은 나오는데 로직이 너무 복잡해서 시간초과 ㅜㅜ.... 그래도 짰다는 것에 의의를 두기로....
import sys
n = int(sys.stdin.readline())
arr = []
stk=[]
sign=[]
for i in range(n):
num = int(sys.stdin.readline())
if not arr : # 빈 문자열일 경우 . 즉 처음의 경우
for j in range(1,num+1):
arr.append(j)
stk.append(j)
sign.append("+")
arr.pop() # 첫 숫자를 바로 빼줘야 하므로 pop을 진행
sign.append("-")
elif num not in arr:
for k in range(max(stk)+1, num+1): # 원래 숫자들이 있는 리스트에서 max값을 구하고 그 max+1부터 num까지 리스트에 추가..
arr.append(k)
stk.append(k)
sign.append("+")
arr.pop() # 추가한 num을 바로 pop해줌
sign.append("-")
elif arr[-1] == num :
arr.pop()
sign.append("-")
else:
sign.append("NO")
if "NO" not in sign:
for s in sign:
print(s)
else:
print("NO")
Author And Source
이 문제에 관하여(백준 단계별문제/스택/ 파이썬 백준 1874 스택 수열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ddd8177/백준-단계별문제스택-파이썬-백준-1874-스택-수열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)