https://www.acmicpc.net/problem/25918
극지 연구소에서 연구 중인 협이는 새로운 북극곰의 특성을 발견했다. 그것은 바로 북극곰이 와 를 보면 와 로 찢어버린다는 것이다.
협이는 이러한 북극곰의 특성을 이용하여 길이 의 괄호 문자열 를 만들고자 한다. 북극곰은 낮에 활동을 하기 때문에 낮에 돌아다니는 것은 위험하다. 때문에 협이는 매일 밤마다 활동할 수 있다. 밤에 협이는 문자열이 있으면 그 위에 또는 를 원하는 만큼 놓을 수 있다. 그러면 낮에 북극곰이 와서 문자들을 모두 찢어 놓는다.
예를 들어 이미 문자열 가 있다고 생각해보자. 밤에 문자를 다음과 같이 놓아둔다면 하루가 지나 와 같은 문자열이 된다.
이때 원하는 문자열을 만들려면 최소 며칠이 걸리는지 계산해보자.
입력은 아래와 같이 주어진다.
원하는 문자열을 만들기 위해 걸리는 최소 일수를 구하라.
원하는 문자열을 만들 수 없다면 -1을 출력한다.
는 '(' 또는 ')'로 이루어져 있다.
문제 자체는 처음 보는 것 같지만 사실 완전한 괄호인지 확인하는 문제와 다를 게 없다.
사실 문제가 이게 도대체 무슨 말인지 이해하는 게 더 오래 걸렸다.
이게 몇 일이 걸릴지 세는 것은 괄호를 만드는 것이 아니라 반대로 O와 X를 만들면 몇 일이 걸릴지 생각하면 된다.
즉 문자열이 (()(())) 이라면,
대충 이런 방식이다.
즉 문자열을 차례대로 탐색하되, 스택 하나를 준비해서 현재 문자와 스택 맨 위 문자가 같은 문자라면 append하고, 아니면 pop하면 된다.
그럼 몇 일이 걸리는지는 어떻게 알까?
위 (()(()))의 예시를 잘 생각해보면, 스택 길이의 최댓값이 구하고자 하는 최소 일수라는 걸 알 수 있다.
import sys
from collections import deque
input = sys.stdin.readline
N = map(int, input())
S = input()
answer = 0
l = []
for c in S:
if c == '\n':
break
if len(l) == 0 or l[-1] == c:
l.append(c)
else:
l.pop()
answer = max(answer, len(l))
if len(l) == 0:
print(answer)
else:
print(-1)
백준 문제가 그냥 취미삼아 하긴 좋긴 한데 문제 설명이 이해가 어려운 문제들이 많은 것 같다...
프로그래머스가 선녀다.