쇠막대기 //10799

김동완·2022년 7월 22일
0

BAEKJOON

목록 보기
8/53
  • 문제
  • 입력
    한 줄에 쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 공백없이 주어진다. 괄호 문자의 개수는 최대 100,000이다.
  • 출력
    잘려진 조각의 총 개수를 나타내는 정수를 한 줄에 출력한다.

// Created by dongwan-kim on 2022/07/22.
#include<iostream>
#include<algorithm>

using namespace std;

string s;
int k, sum;		//k는 막대의 갯수

int main() {
    cin >> s;
    for (int i = 0; s[i] != NULL; i++) {
        if (s[i] == '(') {
            if (s[i + 1] == ')')	//쌍을 이루게 될 경우 ')'부분에서 처리해 줄 것이므로 continue
                continue;
            else					//막대가 추가된 경우
                k++;
        } else if (s[i] == ')') {
            if (s[i - 1] == '(')	//쌍을 이루는 경우
                sum += k;
            else {					//막대가 끝나는 경우
                k--;
                sum++;
            }
        }
    }
    cout << sum;
}

풀이

string s에 입력을 받고 for문을 반복하며 index로 접근하면서 '('일 때와 ')'일 때로 나누어 문제를 해결했다.
변수 k에 막대의 갯수를 저장해준 후, ( ) 로 쌍이 이루어 질 경우에 레이저가 발사되는 지점이므로 그때 추가되는 막대의 갯수 k를 sum에 더해주었다.

'('일 때 쌍을 이루지 않는 경우 k++하며 막대 갯수를 추가해 주었고
')'일 때 쌍을 이루지 않는 경우 k--하며 막대의 갯수를 감소시켜 주었고 끝부분이 더해지기 때문에 sum++을 해주었다.

profile
KIM DONGWAN

0개의 댓글