백준 1874[스택 수열]

Ju_Nik_e·2023년 5월 3일
0

baekjoon

목록 보기
11/16

1. 문제분석 및 접근법

  • 스택에 1부터 n까지 오름차순으로 하나씩 들어감
  • n개의 숫자를 넣을 리스트 생성
  • 리스트의 첫번째 숫자랑 동일해질 때까지 1부터 스택에 넣음
  • 넣을때마다 + 출력
  • 동일해지면 pop,
  • pop할 때는 - 출력
  • 그리고 다시 쌓기
  • 반복하다가 pop을 하고 나서 바로 밑에 있는 데이터가 내가 필요한 수보다 크면 NO

2. 슈도코드

대실패

n 정수값 받기
lst = 0*n 리스트 생성

for i -> n까지:
	lst[i] 정수값 입력받기
   
빈 stack 리스트 생성
num = 1 생성(비교할 숫자, for문에서 증가될 숫자)

for i -> n까지:
	stack에 num 추가
    +출력
	if lst[i]가 num이랑 같으면:
    	stack 팝하고
        -출력
    num 1증가

재시도

n 정수값 받기
lst = 0*n 리스트 생성

for i -> n까지:
	lst[i] 정수값 입력받기
   
빈 stack 리스트 생성
num = 1 생성(비교할 숫자, for문에서 증가될 숫자)

for i -> n까지:
	if lst[i]가 num보다 크거나 같으면:
    	while lst[i]가 num보다 같아질때까지:
        	stack에 num추가
            num += 1
            '+'출력
        pop하고
        '-'출력
    else:
    	pop하면서 결과 저장
        if pop한게 lst[i]보다 크면:
        	NO출력
        else:
        	-출력
  • 틀렷을때 NO만 출력하게 해야함
    -> +,-를 저장해놧다가 한 번에 출력, if문으로 NO출력하면 저장해놓은 결과 출력안되도록

3. 코드 구현

import sys
input = sys.stdin.readline

n = int(input())
lst = [0]*n

for i in range(n):
#     lst[i] = int(input())

stack = []
num = 1
answer = ''
result = True

for i in range(n):
    if lst[i] >= num:
        while lst[i] >= num:
            stack.append(num)
            num += 1
            answer += '+\n'
        stack.pop()
        answer += '-\n'
    else:
        x = stack.pop()
        if x > lst[i]:
            print('NO')
            result = False
            break
        else:
            answer += '-\n'

if result: print(answer)

0개의 댓글