(BOJ) 1874. 스택수열

jmboy713·2023년 4월 12일
0

코딩테스트

목록 보기
1/27
post-thumbnail

백준 링크

import sys

N=int(sys.stdin.readline())
stack=[] # 12345678넣을거
result=[] # 입력값 ( 충족해야하는 수열 )

output=[] # +,- 를 넣을 리스트
for i in range(N):
    result.append(int(sys.stdin.readline()))

head=0 # result 인덱스용

for i in range(1,N+1): # 1~N까지의 숫자가 있다고 가정
    stack.append(i) # 스택에 숫자 추가.
    output.append('+') # 스택에 + 기호 추가
    if stack[-1]==result[head]: # 만약 수열에 와야할 숫자가 스택의 마지막 숫자와 같다면
        while stack[-1]==result[head]: # 같을 때까지
            stack.pop() # 스택에서 pop해준다.
            output.append('-') # - 기호를 추가한다. 
            head+=1 # 수열의 index를 1 추가한다. 
            if stack==[]: # 만약 스택이 비게 되면 while문이 실행되지 않기 때문에 break로 빠져나온다. 
                break

if output.count('-')==output.count('+'): # 만약 + 와 - 갯수가 같다면 ( if stack==[]해도 됨 )
    for i in output: # +,-를 출력
        print(i)
else: # 같지 않다면 수열이 맞춰지지 않았기 때문에 NO 출력.
    print("NO")
  • 스택을 이용한 풀이!
  • pop과 push(append)를 통해서 비교를 계속해서 해나감.
import sys

N=int(sys.stdin.readline())
stack=[] # 12345678넣을거
result=[] # 입력값 ( 충족해야하는 수열 )

output=[] # +,- 를 넣을 리스트
for i in range(N):
    result.append(int(sys.stdin.readline()))

head=0
for i in range(1,N+1):
    stack.append(i)
    output.append('+')
    if stack[-1]==result[head]:
        while stack[-1]==result[head]:
            stack.pop()
            output.append('-')
            head+=1
            if stack==[]:
                break

if output.count('-')==output.count('+'):
    print(*output)
else:
    print("NO")
profile
Python을 활용한 프로그래밍을 하고있습니다! 데이터분석, 인공지능, Django에 관한 정보를 업로드할 예정입니다. 잘부탁드립니다!!

0개의 댓글