문제접근
•
문자열을 입력 받는다
•
입력 받은 문자열을 하나씩 stack에 저장
•
저장을 할때에 이전 문자가 ( 이고 현재 문자가 ) 일 경우 .으로 치환(레이저가 자르는 부분을 나타내기 위해)
•
stack을 순회
stack의 top부터 순차적으로 접근하기 때문에
◦
) 을 만나면 stick의 개수 증가
◦
. 을 만나면 그 동안의 stick을 답에 증가
◦
( 을 만나면 stick의 개수 감소 및 답의 개수 하나 증가
놓쳤던 부분
•
stack의 크기만큼 순회를 하려고 s.size()를 for문 안에 사용.
문제는 for문 안에서 s.pop()연산이 있었기 때문에 s.size()가 고정되는 것이 아니라 계속 값이 변경되는 문제 발생
len = s.size()를 통해서 처음의 스택 길이 저장
코드
2300 KB
0 ms
#include <iostream>
#include <stack>
std::stack<char> s;
std::string str;
int answer = 0;
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
std::cin >> str;
}
void solution()
{
int len = str.length();
int stick = 0;
s.push('(');
for (int i = 1; i < len; i++)
{
if(str[i] == ')' && str[i - 1] == '(')
{
s.pop();
s.push('.');
}
else
s.push(str[i]);
}
len = s.size();
for (int i = 0; i < len; i++)
{
if (s.top() == ')')
++stick;
else if (s.top() == '.')
answer += stick;
else
{
++answer;
--stick;
}
s.pop();
}
}
void print()
{
std::cout << answer;
}
int main(void)
{
input_setting();
input();
solution();
print();
return (0);
}
C++
복사