반응형

문제 출처 :


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



알고리즘 분석 :


문제 해결에 필요한 사항

1. cin , scanf의 원리

2. 수식 판단


이 문제는 공백이 주어진 것이 힌트이다.


공백을 어떻게 판단할 생각 보다 cin 혹은 scanf의 원리를 생각해보면 좋다.


cin, scanf는 개행 및 공백을 무시한다.


결국

cin >> first >> mid >> last >> ignore >> ans;

이런식으로 받으면  원하는 값을 차례대로 받을 수 있다.


그다음 switch문을 이용하여 +,-,*,/를 판단하여 계산하면 된다.


소스 코드가 2가지가 있는데 첫번째 코드는 cin의 원리를 이용하였고


두번째 코드는 string으로 받았을 때를 고려하여 해결해보았다.

하지만 두번째 코드는 음수값이 제대로 동작하지 않기에 string으로 어떻게 접근하였는지만 참조하는게 좋을 듯 하다.


소스 코드 : 



< cin, scanf원리를 이용 >


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
42
43
44
45
46
47
48
49
#include <iostream>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
 
    long long int first, last, ans;
    char mid, ignore;
 
    while (n--)
    {
        cin >> first >> mid >> last >> ignore >> ans;
 
        switch (mid)
        {
        case '+':
        {
            first + last == ans ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '-':
        {
            first - last == ans ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '*':
        {
            first * last == ans ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '/':
        {
            first / last == ans ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
        }
    }
    
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus







< string stl을 이용 >


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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int tCase;
    string first, last, ans, tmp;
    string calc;
 
    char val = NULL;
 
    cin >> tCase;
 
    // cin에서 입력받고 남은 버퍼를 지우는 역할
    while (getchar() != '\n');
 
    while (tCase--)
    {
        getline(cin, calc);
 
        for (int i = 0; i < calc.length(); i++)
        {
            if (calc[i] == '+' || calc[i] == '-' || calc[i] == '*' || calc[i] == '/')
            {
                val = calc[i];
                first = tmp;
                tmp.clear();
            }
 
            else if (calc[i] == '=')
            {
                last = tmp;
                tmp.clear();
            }
 
            else if (calc[i] == ' ')
                continue;
 
            else
                tmp += calc[i];
 
        }
 
        ans = tmp;
 
 
        switch (val)
        {
        case '+':
        {
            (stoi(first) + stoi(last)) == stoi(ans) ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '-':
        {
            (stoi(first) - stoi(last)) == stoi(ans) ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '*':
        {
            (stoi(first) * stoi(last)) == stoi(ans) ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
 
        case '/':
        {
            (stoi(first) / stoi(last)) == stoi(ans) ? cout << "correct" << endl : cout << "wrong answer" << endl;
            break;
        }
        }
 
        // 초기화
        calc.clear();
        ans.clear();
        first.clear();
        last.clear();
        tmp.clear();
    }
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

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

[1120번] 문자열  (0) 2016.11.06
[10824번] 네 수  (0) 2016.11.03
[9934번] 완전 이진 트리  (0) 2016.11.03
[2075번] N번째 큰 수  (0) 2016.11.03
[2188번] 축사 배정  (5) 2016.11.02