[BOJ][실2][1541] 잃어버린 괄호

문제 링크

문제링크

첫 번째 풀이 : Greedy

알고리즘

처음 -를 만난 이후에는 모두 음수로 괄호를 칠 수 있습니다.

정답코드 : cin 풀이 1

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
30
31
32
33
34
35
36
37
38
39
40
41
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;

const int MAX = 5010;
const int MOD = 10007;
int arr[MAX][MAX];
int dp[MAX][2];
bool visited[MAX];

int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };

int n, k;

void show(void);
void bfs(int x, int y);

int main()
{
    //freopen("input.txt", "r", stdin);
    //ios_base::sync_with_stdio(0); cin.tie(0);
    int ans = 0;
    cin >> ans;
    char op;
    int num;
    bool flag = false; // '-'를 발견하면 true;
    while (true) {
        cin >> op;
        if (op == '-') flag = true;
        if (cin.eof()) break;
        cin >> num;
        //cout << op << "," << num << "\n";
        if (flag) ans -= num;
        else ans += num;
    }
    cout << ans;
    return 0;
}

정답코드 : cin 풀이 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
30
31
32
33
34
35
36
37
38
39
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;

const int MAX = 5010;
const int MOD = 10007;
int arr[MAX][MAX];
int dp[MAX][2];
bool visited[MAX];

int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };

int n, k;

void show(void);
void bfs(int x, int y);

int main()
{
    //freopen("input.txt", "r", stdin);
    //ios_base::sync_with_stdio(0); cin.tie(0);
    int ans = 0;
    cin >> ans;
    char op;
    int num;
    bool flag = false; // '-'를 발견하면 true;
    while (cin >> op, !cin.eof()) {
        if (op == '-') flag = true;
        cin >> num;
        //cout << op << "," << num << "\n";
        if (flag) ans -= num;
        else ans += num;
    }
    cout << ans;
    return 0;
}

정답코드 : scanf 풀이

scanf로 char를 받아서 c != 10는 ascii 개행문자 New Line이 아닌지 확인하는 부분입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <string>
using namespace std;
int main(void)
{
    int ans = 0;
    char c;
    int oprd;
    bool negative = false;
    scanf("%d", &ans);
    while (scanf("%c", &c), c != 10) {
        scanf("%d", &oprd);
        if (c == '-') negative = true;
        if (negative) ans -= oprd;
        else ans += oprd;
    }
    printf("%d\n", ans);
    return 0;
}

Success Notice: 수고하셨습니다. :+1:

Leave a comment