알고리즘

[C++] 1541 잃어버린 괄호

민석삼 2025. 1. 14. 17:27

c++ / 실2 / 그리디 알고리즘

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

 

거의 5개월만에 다시 시작한 알고리즘 문제풀이라 적응하는 데 어려움이 좀 있었다.

 

+가 나오면 더하되, 한 번 -가 나온 이후로는 +여도 다 빼면 되는 방식으로 풀었다.

stoi를 사용하면 더 간결하게 풀 수 있을 것 같다. 또한, 문자열을 두 번 탐색하는 부분이 마음에 안드는 코드이다. 더 좋은 방법을 생각하여 다시 풀어보고 싶은 문제이다.

 

다음은 전체 코드이다.

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    string s;
    int num[26];
    int len, n = 0, ans = 0, i = 0, j = 0;
    bool flag = false;

    cin >> s;
    
    len = s.length();
    for(i = 0; j < len; i++) {
        n = 0;
        for(; s[j] >= '0' && s[j] <= '9'; j++) {
            n *= 10;
            n += s[j] - '0';
        }
        num[i] = n;
        j++;
    }
    ans = num[0];
    int k = 1;
    for(int j = 0; j < len && k < i; j++) {
        if (s[j] == '+' && !flag) {
            ans += num[k];
            k++;
        }
        else if (s[j] == '-' || flag) {
            flag = true;
            ans -= num[k];
            k++;
        }
    }
    cout << ans;
    
    return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 7576 토마토  (0) 2025.01.24
[C++] 16953 A->B  (0) 2025.01.14
[자바] 1744 수 묶기  (0) 2024.08.04
[자바] 1041 주사위  (0) 2024.08.03
[자바] 1092 배  (0) 2024.08.01