[백준 1874][파이썬] 스택 수열

2023. 2. 23. 12:00·백준 알고리즘/스택
728x90

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

스택을 이용하는 문제.

 

어렵지는 않지만 여러가지 상황들을 고려하는 것이 까다로웠던 문제이다.

 

나는 다음 세 변수들을 생성하여 서로 값을 비교하면서 문제를 풀었다.

 

  1. 마지막으로 스택에 넣은 값 (이 값은 무조건 1씩 증가)
  2. 현재 스택의 가장 위에 있는 값
  3. 입력 값

다음과 같은 상황들을 고려하면 된다. 

 

입력 값(3번)이 마지막으로 스택에 넣은 값(1번)보다 같거나 크다면?

 

이럴 경우 3번과 값이 같아질 때까지 1번의 값을 증가시키면서 스택에 push한다.

 

같아진다면 pop을 한다.

 

입력 값(3번)이 마지막으로 스택에 넣은 값(1번)보다 작다면?

 

이럴 경우 3번 값은 이미 스택에 들어간 적이 있다는 뜻이다.

 

그러면 나올 때까지 pop을 하면 된다.

 

그런데 스택이 빌 때까지 나오지 않았다면 이미 pop이 되었다는 뜻이고 NO를 출력하면 된다.

 

위 과정들을 반복하면 된다.

 

<최종 코드>

import sys
# 입력으로 들어온 값이 last_input보다 작으면?
#     =>stack[-1]값과 입력값 비교 입력값이 더 크거나 스택이 비어있으면?
#         =>불가능
#     =>아니면?
#         =>나올때까지 pop하기
#          =>계속 stack[-1]과 비교
# 크면?
#     =>last_input 증가시키면서 스택에 넣기
n=int(sys.stdin.readline())
last_input=1
stack=[]
res=''
for _ in range(n):
    temp=int(sys.stdin.readline())
    if temp>=last_input:
        while last_input<=temp:
            stack.append(last_input)
            last_input+=1
            res+='+'
        stack.pop()
        res+='-'
    else:
        if len(stack)==0:
            print("NO")
            exit()
        else:
            while stack.pop()!=temp:
                res+='-'
                if len(stack)==0:#다 꺼냈는데 안 나옴
                    print("NO")
                    exit()
            #통과했다는건 나왔다는 뜻
            res+='-'
for i in res:
    print(i)

 

728x90

'백준 알고리즘 > 스택' 카테고리의 다른 글

[백준 5430][파이썬] AC  (0) 2023.02.25
[백준 10799][파이썬] 쇠막대기  (0) 2023.02.05
[백준 9012][파이썬] 괄호 문제  (0) 2023.02.03
'백준 알고리즘/스택' 카테고리의 다른 글
  • [백준 5430][파이썬] AC
  • [백준 10799][파이썬] 쇠막대기
  • [백준 9012][파이썬] 괄호 문제
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bfs
    influxDB CLI
    embedding
    parametric search
    RNN
    ci/cd
    openvidu 배포
    ChatPromptTemplate
    binary search
    스택
    codetree
    푸쉬 알람
    nn.RNN
    code tree
    스프링 OAuth2
    파이썬
    AWS Lambda
    Merge
    다익스트라
    Vector Store
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[백준 1874][파이썬] 스택 수열
상단으로

티스토리툴바