본문 바로가기
알고리즘 풀이/백준

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

by char_lie 2023. 2. 12.
반응형

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

스택 수열 문제

while을 잘 활용하면 쉽게 해결 할 수 있는 문제

100% 내 생각으로 풀었는가?
→ △

while문의 특징에 대해 캐치하는데 너무 오래걸려서 힌트 참고

 

내가 푼 코드 (정답)

import sys
N = int(sys.stdin.readline())
stack = [] 
start = 1
operator = []

for _ in range(N):
    end = int(sys.stdin.readline())
    while start <= end: # 시작지점부터 입력받은 지점까지
        stack.append(start) # 스택에 1씩 저장
        operator.append('+')
        start += 1
    
    if stack[-1] == end : # 만약 스택 마지막 항이 end랑 같을 경우
        stack.pop() #마지막 부분 꺼냄
        operator.append('-')
    
    else : #end랑 다를 경우
        print("NO") 
        break

else :
    for i in operator :
        print(i)

stack의 기본 원리인 push와 pop에 대해서 생각해볼 수 있는 좋은 문제였다

처음에 for문으로 시도하다가 자꾸 중간에서 오류 나서 왜 안되지? 하고 엄청 고민한 끝에 힌트를 참고한 결과, for문의 경우 for i in range~~ 문으로 하면 반복문이 돌때 i가 range로 지정한 0부터 시작하게 저장돼서 중간에 숫자가 커지면 오류가 발생했다!

반응형

while문의 특성상 값을 증가해주면서 찾는 방식은 값을 초기화를 따로 해주지 않는 이상 저장이 되기 때문에 stack 처럼 1~4까지 저장하고 6이 들어오면 1부터 6까지 다시 찾는게아닌 5~6부분만 고려해줄 수 있게 while문으로 처음부터 생각했으면 쉽게 해결했을 수 있었던 문제이다. (물론 따로 변수를 넣으면 for로도 가능)

while 문으로 짜는 순간 굉장히 쉽게 접근 가능한 문제!


느낀점

매번 for만 쓰다보니 while문을 제대로 활용하지 못하고 있었단걸 생각하게 해준 문제라고 생각한다. 이걸 for로 구현하겠다고 시도하다가 한가지를 놓쳐서 100% 자력으로 해결하지 못한 부분이 너무 아쉽게 느껴졌다.

여러가지 기본적인 것들을 놓치지말고 하나씩 다 잘 사용할 수 있는 개발자가 되려면 갈길이 아직 먼거 같다 😥

반응형

댓글