C++ 알고리즘 기초12 -비교연산 배우기, and와 or 배우기-

1. 비교연산자

 

C++에서 비교연산은 식이 참이면 1, 거짓이면 0을 반환한다

 

cout << (1 > 2) << endl;
cout << (1 < 2) << endl;

0
1

 

C++에서 0이 아닌 값은 true이고, 0은 false로 정의한다

 

if (15) {
    cout << "A" << endl;
}

if (0) {
    cout << "B" << endl;
}

A

 

2. 연습문제

 

두 정수 a, b를 입력받아 다음 조건들이 참이면 1을 거짓이면 0을 출력하는 프로그램을 작성하시오

  • a가 b보다 같거나 큰가?
  • a가 b보다 큰가?
  • b가 a보다 같거나 큰가?
  • b가 a보다 큰가?
  • a와 b가 같은가?
  • a와 b가 다른가?

 

조건식의 결과가 참이면 1, 거짓이면 0을 반환하므로, 조건식을 cout하면 된다

 

#include <iostream>
using namespace std;

int main() {
    
    int a,b;

    cin >> a >> b;

    cout << (a >= b) << endl;
    cout << (a > b) << endl;
    cout << (b >= a) << endl;
    cout << (b > a) << endl;
    cout << (a == b) << endl;
    cout << (a != b) << endl;
    
    return 0;
}

 

3. and연산

 

C++에서 2개 이상의 조건을 동시에 만족하는지를 알고싶다면, && 기호를 사용한다.

 

파이썬이나 and가 먹히지 다른 언어는 &&로 써줘야함

 

다음은 조건1과 조건2가 모두 참이면 코드 1을 실행하는 수도 코드

 

if (조건1 && 조건2) {

    코드1

}

 

당연하지만 조건 수는 2개 이상도 가능하다

 

다음은 조건1,2,3이 모두 참일때 코드1을 실행

 

if (조건1 && 조건2 && 조건3) {

    코드1

}

 

a를 2로 나눈 나머지가 0이고, a가 10보다 크다면 special을 아니라면 normal을 출력

 

#include <iostream>
using namespace std;

int main() {

	int a;
	cin >> a;
	if (a % 2 == 0 && a > 10) {
		cout << "special";
	}
	else {
		cout << "normal";
	}

	return 0;

}
10
special

 

a가 2이상 10이하인지 판단하는 조건은 어떻게 작성할 수 있을까?

 

&&를 이용해서, "a가 2이상" && "a가 10이하"로 써줘야한다.

 

a가 2이상이고 10이하이다로 쓰는 것은 파이썬만 가능

 

c++도 17부터는 지원하는듯? 실제로 2 <= a <= 10으로 써도 에러는 안난다..

 

하지만 권장하지는 않는

 

https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0893r0.html

 

Chaining Comparisons

The idea of chaining comparisons was first put forth in P0515R0, in section 3.3, reproduced here in its entirety. C++17 has added fold expressions, which are very useful. However, as Voutilainen and others have reported, fold expressions do not currently w

www.open-std.org

 

#include <iostream>
using namespace std;

int main() {

	int a;
	cin >> a;

	if (2 <= a && a <= 10) { // 2<=a<=10은 불가능
		cout << "in range";
	}
	else {
		cout << "out of range";
	}

	return 0;

}

 

4. 연습문제

 

3개의 정수를 입력받아 조건연산자를 이용하여 입력받은 수 중 최솟값을 출력하는 프로그램을 작성해주세요.

 

a가 b보다 작거나 같고, a가 c보다 작거나 같으면 a가 최솟값

 

아니라면, b가 a보다 작거나 같고, b가 c보다 작거나 같으면 b가 최솟값

 

그것도 아니라면 c가 최솟값

 

#include <iostream>
using namespace std;

int main() {
    
    int a,b,c;

    cin >> a >> b >> c;

    if (a <= b && a <= c) {
        cout << a;
    } else if ( b <= a && b <= c) {
        cout << b;
    } else {
        cout << c;
    }
    return 0;
}

 

5. or 연산

 

C++에서 2개 이상의 조건들 중 하나라도 만족하는지 검사하기 위해 || 기호를 사용하여 or연산을 수행한다

 

역시 파이썬이나 or이 가능하지, 다른 언어는 || 을 써야한다

 

다음은 조건1이 참이거나, 조건2가 참이면 코드 1을 수행하는 수도 코드

 

if ( 조건1 || 조건2 ) {

    코드1

}

 

당연하지만, 3개 이상의 조건에서도 ||을 써서 표현가능

 

if ( 조건1 || 조건2 || 조건3 ) {

    코드1

}

 

a가 10보다 작거나, 20보다 큰 수인지를 판단하는 프로그램

 

#include <iostream>
using namespace std;

int main() {
    
    int a;
    cin >> a;

    if ( a < 10 || a > 20){
        cout << "yes";
    } else {
        cout << "no";
    }
    return 0;
}

 

6. 연습문제

 

2480번: 주사위 세개 (acmicpc.net)

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개

www.acmicpc.net

 

7. 풀이

 

제시된 조건에 따라 프로그래밍하면 되는 문제..

 

위에서 배운 조건문 비교연산 총 동원

 

#include <iostream>
using namespace std;

int main() {
	int a, b, c;
	cin >> a >> b >> c;

	if (a == b && b == c) {
		cout << 10000 + (1000 * a);
	}
	else if ((a == b && b != c) || (a == c && a != b)) {
		cout << 1000 + (100 * a);
	}
	else if (b == c && a != b) {
		cout << 1000 + (100 * b);
	}
	else {
		if (a > b && a > c) {
			cout << 100*a;
		}
		else if (b > a && b > c) {
			cout << 100 * b;
		}
		else {
			cout << 100 * c;
		}
	}
	return 0;
}
TAGS.

Comments