728x90

 0. [c++] 백준  - 


https://www.acmicpc.net/problem/10799


 1. 풀이


1) string에 입력된 문자열을 저장하자.

2) string을 탐색하면서 잘리는 조각들을 확인하는데, 조각의 개수는 

(1) 레이저에 의해 잘리는 경우

- 우선, 이번 input[i]가 '('라면, queue에 1을 추가해준다.

- 쭉쭉 추가해주다가, "()"를 만나게 된다면, 한번 pop을 해주고 queue에 남아있는 숫자를 ret에 더해준다.(한번 빼주는 것은 레이저의 '('를 빼준 것)


(2) 쇠막대의 마지막 부분인 경우

-이전 input[i-1]가 ')'이고 이번 input[i]가 ')'라면, 쇠막대가 끝났다는 이야기이다.

-이 경우라면 queue를 pop해주고 ret에 1을 더해준다.



 2. 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<queue>
#include<string>
 
using namespace std;
 
queue<int> qu;
string input;
 
int main() {
    cin >> input;
    int ret = 0;
    for (int i = 0; i < input.size(); i++) {
        if (input[i] == '('
            qu.push(1);
        else if (input[i] == ')'
            if (input[i - 1== '(') {
                qu.pop();
                ret += qu.size();
            }
            else if (input[i - 1== ')') {
                ret++;
                qu.pop();
            }
    }
    cout << ret << endl;
 
 
}
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts