-
5656번. 비교 연산자IT Tech/PS 2021. 3. 27. 15:26
문제
C언어의 비교 연산자는 아래 표에 나와있다.
연산자 뜻
> 크다 >= 크거나 같다 < 작다 <= 작거나 같다 == 같다 != 같지 않다 이 연산자는 두 피연산자를 비교하고, (왼쪽 값과 오른쪽 값) true또는 false (1 또는 0)을 리턴한다. 예를 들어, 2 > 3은 "false"를 리턴하고 (2는 3보다 작기 때문), 3 != 4는 "true", 3 >= 3은 "true"를 리턴한다.
C언어의 비교 연산식이 주어졌을 때, 결과를 구하는 프로그램을 작성하시오.
입력
입력은 최대 12000줄로 이루어져 있다. 각 줄은 두 정수 a, b가 주어지며, 정수 사이에는 연산자 ">", ">=", "<", "<=", "==", "!="중 하나가 주어진다. 연산자와 피연산자 사이에는 공백이 하나 있으며, 연산자로 "E"가 주어진 경우에는 프로그램을 끝낸다. (-10000 ≤ a,b ≤ 10000)
출력
입력의 각 줄 마다 입력으로 주어진 식의 결과가 "true"인지 "false"인지 출력한다.
예제 입력
3 != 3
4 < 4
4 <= 5
3 E 3
예제 출력
Case 1: false
Case 2: false
Case 3: true
#include <iostream> using namespace std; string getResult(bool result) { if( result == 1) return "true"; else return "false"; } int main(void) { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; int a, b; int n = 1; bool result; while(true) { cin >> a; cin >> s; cin >> b; if( s == ">=" ) { if (a >= b) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } else if ( s == "E") { break; } else if ( s == ">" ) { if ( a > b ) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } else if ( s == "<=") { if( a <= b ) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } else if ( s == "<" ) { if( a < b ) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } else if ( s == "!=" ) { if( a != b ) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } else if ( s == "==" ) { if( a == b ) { result = true; cout << "Case " << n << ": " << getResult(result) << endl; } else { result = false; cout << "Case " << n << ": " << getResult(result) << endl; } } n++; } return 0; }
기존 코드인데 너무 읽기 가독성이 떨어진다고 생각했다.
#include <iostream> using namespace std; int* getResult(bool result, int *n) { cout << "Case " << *n << ": "; if( result == 1) cout << "true" << endl; else cout << "false" << endl; return n; } bool opResult(int a, string op, int b) { if( op == ">") { if( a > b) { return true; } else { return false; } } else if ( op == ">=") { if( a >= b ) { return true; } else { return false; } } else if ( op == "<") { if( a < b) { return true; } else { return false; } } else if ( op == "<=") { if( a <= b) { return true; } else { return false; } } else if ( op == "!=" ) { if( a != b) { return true; } else { return false; } } else if ( op == "==" ) { if( a == b) { return true; } else { return false; } } else { return "E"; } } int main(void) { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s, op; int a, b; int n1 = 1; int *n = &n1; bool result; while(true) { cin >> a; cin >> s; if(s == "E") return 0; cin >> b; result = opResult(a, s, b); n = getResult(result, n); n++; } return 0; }
이게 더 복잡한가 ㅋㅋㅋㅋ 제출은 안되지만.;;
반응형'IT Tech > PS' 카테고리의 다른 글
2845번. 파티가 끝나고 난 뒤 (0) 2021.04.24 1769번. 3의 배수 (0) 2021.04.07 2475번. 검증수 (0) 2021.03.21 2164번. 카드2 (0) 2021.02.08 11328번. Strfry (0) 2021.02.01