BAEKJOON : 9012, 1874

No. 9012

1. Problem




2. My Solution

  • 괄호의 개수가 홀수개이면 VPS가 아님
  • 괄호의 개수가 짝수개일 때 '()'를 replace 함수를 이용하여 제거했을 때 모두 없어지면 VPS
import sys

test_n = int(sys.stdin.readline().strip())

for _ in range(test_n):
    ps = sys.stdin.readline().strip()

    for _ in range(len(ps)//2):
        ps = ps.replace("()","")
    
    if len(ps) == 0:
        print('YES')
    else:
        print('NO')




3. Others' Solutions

  • 스택 자료구조를 이용하여 문제 해결

def solve():
    data = input()
    stack = []
    for item in data:
        if item == '(':
            stack.append(item)
        else:
            if len(stack) == 0:
                print("NO")
                return
            else:
                stack.pop()
    if len(stack) == 0:
        print("YES")
    else:
        print("NO")




4. Learned

  • 스택의 원리와 괄호의 원리에 대해서 좀 더 생각하게 되었다
  • replace 함수는 결과를 반환할 뿐 원본 문자열 데이터는 바뀌지 않는다




No. 1874

1. Problem




2. My Solution

  • 원소가 없을 경우에 [-1] 인덱스 접근은 IndexError 를 발생시키므로 try-catch 문 이용
import sys

n = int(sys.stdin.readline().strip())

sequence = []
stack = []
push_pop = []

for _ in range(n):
    sequence.append(int(sys.stdin.readline().strip()))

i = 0
j = 0
flag = True

while(i != n or len(stack)!=0):

    try:
        if stack[-1] > sequence[j]:
            flag = False
            break

        elif stack[-1] == sequence[j]:
            stack.pop()
            push_pop.append("-")
            j += 1

        else:
            i += 1
            stack.append(i)
            push_pop.append("+")
    except:
        i += 1
        stack.append(i)
        push_pop.append("+")
    
        
if flag == True:
    for i in push_pop:
        print(i)
else:
    print("NO")




3. Learned

  • try-catch 문을 이용해서 어려운 구현 부분을 대신할 수 있다

좋은 웹페이지 즐겨찾기