본문 바로가기
IT/알고리즘

백준 - 1874번(스택 수열)

by Sungjun_ 2020. 11. 4.

문제

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 


코드

 

from typing import Any

class Stack:
    def __init__(self, capacity: int) -> None:
        self.stk = [None] * capacity
        self.capacity = capacity
        self.ptr = 0

    def push(self, value) -> Any:
        self.stk[self.ptr] = value
        self.ptr += 1

    def pop(self) -> Any:
        self.ptr -= 1
        return self.stk[self.ptr]

    def peek(self) -> Any:
        return self.stk[self.ptr - 1]


n = int(input())
s = Stack(n)
stkNum = 1
temp = []

for i in range(n):
    num = int(input())
    
    while stkNum <= num:
        s.push(stkNum)
        stkNum += 1
        temp.append('+')
        
    if s.peek() == num:
        s.pop()
        temp.append('-')
        
    else:
        print('NO')
        exit(0)

print('\n'.join(temp))

 

먼저 Stack 클래스를 정의해 초기화 및 push, pop, peek 함수를 만들었습니다.

peek 함수는 가장 위에 있는 숫자를 반환하는 함수 입니다.

 

for문을 돌려서 숫자를 입력받고 입력 받은 숫자와 stkNum이 같아질 때 까지 push를 하고

같아지면 pop을 해줍니다.

 


결과

결과

 

'IT > 알고리즘' 카테고리의 다른 글

백준 - 9012번  (0) 2020.11.07
알고리즘 - 스택(deque)  (0) 2020.11.06
백준 - 10828번(스택)  (0) 2020.11.04
알고리즘 - 스택(stack)  (0) 2020.11.03
알고리즘 - 해시법(3)  (0) 2020.11.02

댓글