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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom