무제

[백준] 자료구조 - 9012(괄호) / 1874(스택 수열) 본문

Study/Coding Test 오답노트

[백준] 자료구조 - 9012(괄호) / 1874(스택 수열)

mugan1 2024. 10. 19. 15:01

1. 괄호 : 9012번

import sys
input = sys.stdin.readline

n = int(input())

for i in range(n):
    stack = []
    ps = input().strip()
    
    # 기존 코드 
    # for x in ps:
    #     if len(stack) :
    #         if stack[-1] == "(" and x == ")" :
    #             stack.pop()
    #         else :
    #             stack.append(x)
    #     else :
    #         stack.append(x)
    # if len(stack):
    #     print("NO")
    # else :
    #     print("YES")
    
    # 다른 방법 
    for x in ps :
        if x == "(" :
            stack.append(x)
        elif x == ")":
            if stack :
                stack.pop()
            else : 
                print("NO")
                break
    else :
        if stack :
            print("NO")
        else :
            print("YES")

 

다른 방법이 훨씬 나아보인다...

 

2. 스택 수열 : 1874번 

 

어려웠다

코드상의 cnt부터 시작해서 수를 stack에 넣고 num해 해당되면 pop한다.

cnt가 num을 넘어버리거나 마지막 stack에 num이 없으면 더 진행할 수 없다 

예를 들어

[3,4]가 남은 상황에서 3을 얻기 위해 4까지 지워야하는데, cnt가 5까지 모두 진행했다면 4를 얻을 수 없다.

 

import sys
input = sys.stdin.readline

n = int(input())

stack = []
answer = []
possible = True
cnt = 1

for _ in range(n):
    num = int(input())
    while cnt <= num :
        stack.append(cnt)
        cnt += 1
        answer.append("+")
    if stack[-1] == num:
        stack.pop()
        answer.append("-")
    else :
        possible = False
        print("NO")
        break
        
if possible :
    for a in answer:
        print(a)
Comments