boj 10799 c++ 쇠막대기
백준 10799 cpp 쇠막대기
정답률 60%에 육박하는데 오래 걸려서 당황했다. 스택이랑 나는 진짜 악연이 깊은 것 같다.
아무튼 해법은, 레이저를 만나면 스택의 길이 만큼 더하고, 쇠막대기의 끝을 만나면 무조건 1씩 더한다는 것이다.
왜 그런지는 그림을 보면서 하나씩 대입해보는 것이 가장 이해가 빠를 것이다.
정답코드
#include <bits/stdc++.h>
using namespace std;
stack<char> S;
string line;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> line;
int ans = 0;
bool ispipe = true;
for (char c: line)
{
if (c == '(')
{
S.push(c);
ispipe = true;
}
else // c == ')'
{
if (ispipe == true) // laser
{
S.pop();
ans += S.size();
ispipe = false;
}
else // laser x
{
ans += 1;
S.pop();
}
}
}
cout << ans;
}
'Algorithm' 카테고리의 다른 글
boj 9012 c++ 괄호 (0) | 2020.09.03 |
---|---|
boj 2504 c++ 괄호의 값 (0) | 2020.09.02 |
BOJ 1021 c++ 회전하는 큐 (0) | 2020.08.29 |
BOJ 2164 c++ 카드 2 (0) | 2020.08.26 |
BOJ 18258 c++ 큐 2 (0) | 2020.08.26 |
최근댓글