바위 뚫는중

[BOJ] 스택문제 - 1874 스택 수열, 4949 균형잡힌 세상 Python3 본문

Algorithms

[BOJ] 스택문제 - 1874 스택 수열, 4949 균형잡힌 세상 Python3

devran 2023. 1. 29. 23:59
반응형

백준 1874 스택 수열

이게 뭔소린가 했더니 내가 8까지의 수를 스택에 넣는다 쳤을때, 4, 3, 6, 8, 7, 5, 2, 1이 주어지는데, 스택을 이용해서 이 수열을 만들수 있냐는게 이 문제다. 문제 말이 어렵다.

여튼 저 수열을 만들어보자.

1,2,3,4 push 4,3을 pop

1,2,5,6 push 6 pop

1,2,5,7,8 push 8,7 pop

1,2,5 pop → 4,3,6,8,7,5,2,1

1에서 주어진 n까지 내가 원하는 수를 찾으면 pop, 찾지 못하면 push 하는 것이 원리인듯하다!

그래서 여튼 저 수열을 만들라면 4가 나와야하니까 4까지는 수를 집어넣어야한다

  • 주어진 수가 4보다 작으면 스택에 넣는다. 1부터 시작이니 1부터 3까지는 넣어줌!
    • 변수를 이용해보자
  • 주어진 수가 4라면, 스택에서 빼준다
  • 두가지 경우가 다 아니라면 NO를 출력하면 된다
n = int(input())

count = 1
stack = []
op = []

for i in range(n):
    data = int(input())

    while count <= data:
        stack.append(count)
        op.append('+')
        count += 1

    if stack.pop() == data:
        op.append('-')

    else:
        print("NO")
        exit(0)
result = '\n'.join(op)
print(result)

백준 4949 균형잡힌 세상

세계는 균형이 안잡혀있는데,, 문제가 참 힘들군ㅎ

예전에 스택을 이용한 괄호문제를 조금 더 응용한 버전 같다.

( 이괄호는 ) 이괄호로 끝나야만 하고, [ ] 이 친구들도 마찬가지 인셈

) ( 이런식은 안되는 것이고,

→ (와 [가 나올경우 +1, )와 ]가 나올경우 -1로 간주하여 합계가 0이되는지 확인하면 될것 같다.

생각정리

  • ( 와 [ 일 경우는 스택에 push, ) 와 ]가 나타나면 앞선 괄호들을 pop 해주면 된다
  • 다른 단어들은 그냥 무시하고 코드를 작성하면 된다.
  • . 가 나타날 경우에는 종료를 해주도록!!
  • 따로 몇개의 줄이라는 조건이 없어서 for가 아닌 while로 시작한뒤에 for로 한글자 한글자를 파악하면 된다.

코드

import sys

while True:
    input = str(sys.stdin.readline().rstrip())
    stack = []
    
    if input == '.':
        break
    
    for i in input:
        if i == ('(') or i == ('['):
            stack.append(i)
        elif i == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                stack.append(i) 
                break
        elif i == ']':
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                stack.append(i)  
                break
            
    if not stack:
        print('yes')
    else:
        print('no')

계속 틀려서 다른 사람 코드들을 보니 true false등을 tmp로 구분짓기도 했다.

알고보니 내가 틀린 이유는 print를 YES NO 대문자로 해서 틀림

맞왜틀을 10번넘게 했다. 눈물이 나네.

 

반응형