[백준 1874] 스택 수열 (Python)

hhkim·2022년 8월 26일
0

algorithm - python

목록 보기
4/10
post-thumbnail

바킹독 스택 강의를 공부하고 푼 문제. 처음에 문제부터 이해가 안 가서 엉뚱하게 코드 짜고 고민하다가 보니까 친절하게 설명해준 글이 있어서 다시 했다.

문제를 이해하고 나면 어려운 문제는 아니었다. 입력받은 수열이 있고, 1~n까지의 숫자가 있을 때 이 오름차순의 숫자를 스택에 넣고 빼는 작업을 해서 입력받은 수열을 만들면 된다.

🦾 배운 점

배열의 인덱스를 음수로 지정하면 끝에서부터 탐색을 할 수 있다.
예) a[-1]은 배열의 마지막 원소

import sys

input = sys.stdin.readline

n = int(input())	# 수열의 길이
a = []				# 수열
# 수열 입력받기
for i in range(n) :
	a.append(int(input()))

index = 0		# 스택의 숫자를 제거할 기준이 될 수열 원소의 인덱스
s = []			# 스택
result = []		# +, -를 저장할 결과 배열
for i in range(1, n + 1) :
	# 일단 스택에 숫자 push
	s.append(i)	
	result.append('+')
    # 스택에 남은 숫자가 있고 top이 수열의 index번째인 동안 pop
	while s and s[-1] == a[index] :
		s.pop()
		result.append('-')
		index += 1

if s :					# 스택에 숫자가 남아 있으면 수열을 만들지 못하는 것이므로 NO 출력
	print('NO')
else :					# 아니면 result 배열 출력
	for e in result :
		print(e)

0개의 댓글