Notice
Recent Posts
Recent Comments
tony9402
[백준 5656] 비교 연산자 본문
반응형
단순 구현 문제이다. 한 문장에서 정수를 뽑고 비교연산자를 뽑아서 계산하면 된다.
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