Today
Total
Archives
05-20 07:18
관리 메뉴

tony9402

[백준 5656] 비교 연산자 본문

알고리즘/Baekjoon Online Judge

[백준 5656] 비교 연산자

ssu_gongdoli 2018. 10. 20. 21:04
반응형

단순 구현 문제이다. 한 문장에서 정수를 뽑고 비교연산자를 뽑아서 계산하면 된다.


input data를 보면 규칙이 있다.


3 != 3을 보면 '3' + ' ' + '!' + '=' + ' ' + '3'이다. 

-3 > 3을 보면 '-' + '3' + ' ' + '>' + ' ' + '3'이다.


이 두 가지를 잘 보면 문장을 처음부터 읽을때 -가 나오거나 숫자가 나오면 그건 숫자라는 것을 알 수 있다. 이 숫자의 끝은 숫자가 나오다가 띄어쓰기가 나온다면 그 숫자가 끝난 부분이다.

그 다음엔 비교 연산자를 읽어야 하는데 그것은 단순히 '!', '>', '<', '='이 보이면 단순히 그거랑 하나 더 받으면 된다. 그게 가능한 이유는 모든 Input data가 비교연산자 바로 다음은 띄어쓰기가 되어있기 때문이다. 그리고 뒤에 숫자는 앞에 읽었던 숫자랑 똑같은 방법으로 읽으면 된다. 


컴퓨터구조 공부하기 전에 풀려고 했지만 아무생각없이 짜다보니깐 푸는 시간이 좀 길어졌다.. (실수가 너무 많다.)



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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
 
using namespace std;
 
vector<int> vc;
char input[12001];
char in[5];
char cal[] = { '=','!','<','>'};
 
int main()
{
    bool check = false;
    bool ans = false;
    int count = 1;
    int ml, mr;
    while (1)
    {
        ml = mr = 1;
        cin.getline(input, 12001);
        vc.clear();
        ans = false;
        check = false;
        for (int i = 0; i < strlen(input); i++)
        {
            if (input[i] == 'E')return 0;
            if (input[i] == '-')
            {
                if (vc.size() == 0)
                {
                    ml = -1;
                }
                else
                {
                    mr = -1;
                }
            }
            if ('0' <= input[i] && input[i] <= '9')
            {
                if (i == strlen(input) - 1)vc.push_back(i + 1);
                if (!check)
                {
                    check = true;
                    vc.push_back(i);
                }
            }
            else if(!('0' <= input[i] && input[i] <= '9'&& check || i == strlen(input) - 1)
            {
                vc.push_back(i);
                check = false;
            }
            for (int j = 0; j < sizeof(cal); j++)
            {
                if (input[i] == cal[j])
                {
                    in[0= input[i];
                    in[1= input[i + 1];
                    if (in[1== ' ')
                    {
                        continue;
                    }
                    else
                    {
                        i += 1;
                    }
                }
            }    
        }
        sort(vc.begin(), vc.end());
        int left = 0, right = 0;
        for (int i = vc[0]; i < vc[1]; i++)
        {
            left *= 10;
            left = left + input[i] - '0';
        }
        for (int i = vc[2]; i < vc[3]; i++)
        {
            right *= 10;
            right = right+ input[i] - '0';
        }
        left *= ml;
        right *= mr;
 
        if (in[0== '>' && in[1== '=')
        {
            if (left >= right)
            {
                ans = true;
            }
        }
        else if (in[0== '>')
        {
            if (left > right)ans = true;
        }
        else if (in[0== '<' && in[1== '=')
        {
            if (left <= right)ans = true;
        }
        else if (in[0== '<')
        {
            if (left < right) ans = true;
        }
        else if (in[0== '=')
        {
            if (left == right) ans = true;
        }
        else
        {
            if (left != right)ans = true;
        }
 
        cout << "Case " << count << ": ";
        if (ans)
        {
            cout << "true\n";
        }
        else
        {
            cout << "false\n";
        }
        ++count;
    }
 
    return 0;
}

cs


반응형

'알고리즘 > Baekjoon Online Judge' 카테고리의 다른 글

[백준 9095] 1, 2, 3 더하기  (0) 2018.11.07
[백준 1806] 부분합  (0) 2018.10.20
[백준 1182] 부분집합의 합  (0) 2018.10.20
[백준 11657] 타임머신  (0) 2018.08.31
[백준 1504] 특정한 최단 경로  (0) 2018.08.31
Comments