알고리즘/문제 풀이

1541번: 잃어버린 괄호

Themion 2021. 12. 8. 15:36

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

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

입력받은 수식을 '-' 기호로 쪼갠 뒤, 쪼개서 나온 각 덧셈식을 괄호로 묶으면 식의 최솟값을 구할 수 있다.

예) (a + b) - (c + d + e) - (f + g)

#include <cstdio>

int main() {
    // 수식을 -를 기준으로 쪼개면
    // 수식에서 '-'가 나오기 이전 수를 모두 더한 값에서
    // '-'가 나온 이후 수를 모두 빼 최솟값을 만들 수 있다
    // (a + b) - (c + d + e) - (f + g)
    bool is_minus = false;
    // 수식을 한 글자씩 입력받아 계산
    char c;
    // ans: 정답을 저장할 공간
    // temp: 문자열에서 각 수를 추출해 temp에 저장
    int ans = 0, temp = 0;

    while (true) {
        // 수식의 각 글자를 입력받은 뒤
        scanf("%c", &c);

        // 입력받은 글자가 숫자일 경우 temp 뒤에 붙여 숫자를 마저 완성시킨다
        if (c >= '0' && c <= '9') temp = temp * 10 + (c - '0');
        // 입력받은 숫자가 +, 혹은 -라면
        else {
            // -가 이미 나왔다면 temp를 ans에서 빼고
            // 그렇지 않다면            anst에 더한다
            ans += is_minus ? -temp : temp;
            temp = 0;

            // 입력받은 글자가 '-'라면 '-'가 나왔음을 표시한다
            if (c == '-') is_minus = true;
            // 개행문자를 입력받았다면 수식이 끝났으므로 루프를 빠져나간다
            else if (c == '\n') break;
        }
    }

    // 계산한 결과를 출력한다
    printf("%d\n", ans);

    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

1614번: 영식이의 손가락  (0) 2021.12.09
1546번: 평균  (0) 2021.12.08
1504번: 특정한 최단 경로  (0) 2021.12.08
1495번: 기타리스트  (0) 2021.12.08
1476번: 날짜 계산  (0) 2021.12.08