컴퓨터기본/문제풀이

[백준] 10799번: 쇠막대기

차가운오미자 2021. 9. 3. 12:00

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

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

문제 이해

문자열 파싱하는 문제이다. (와 )가 붙어있으면 레이저이고 아니면 막대기의 시작이거나 끝이다. 

1. ( 과 )가 붙어있는 경우 -> 레이저

2. ( 다음에 )가 아니면 -> 막대의 시작

3. ) 인데 전이 (이 아니면 -> 막대의 끝

 

레이저일 때는 막대만큼 덩어리 추가,

막대의 시작이면 막대 개수 추가

막대의 끝이면 막대 개수 감소

 

이렇게 처리해서 막대 덩어리들의 수를 찾으면 된다. 

 

작성 코드

#include <stdio.h>

char str[100000 + 10]; 

int main() {
    int ans = 0;
    int cnt = 0;

    scanf("%s", str);//입력

    for (int i = 0; str[i]; i++) {
        if (str[i] == '(' && str[i + 1] != ')') {
            // 레이저가 아님
            cnt++;
        }
        else if (str[i] == '(' && str[i + 1] == ')') {
            // 레이저임
            ans += cnt;
            i++;
        }
        if (str[i] == ')' && str[i - 1] != '(') {
            //막대가 하나 끝남
            ans += 1;
            cnt--;
        }
    }

    printf("%d\n", ans);//출력
    return 0;
}

'컴퓨터기본 > 문제풀이' 카테고리의 다른 글

[백준] 2108: 통계학  (0) 2021.09.06
[정올] 1495 : 대각선 지그재그  (0) 2021.09.03
[백준] 2567번: 색종이 - 2  (0) 2021.09.03
[정올] 2008 : 할부  (0) 2021.09.03
[정올] 2712 : 두 수의 최소합  (0) 2021.09.03