데일리 codeup/조건문

and 기호, or 기호, and&or 혼합

hayo_su 2022. 7. 2. 17:40

and 기호


2개 이상의 조건을 동시에 만족하는지를 알고싶은 경우라면, 다음과 같이 && (and) 를 사용하면 된다

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

    코드1

}

3개의 조건을 모두 만족시키는지에 대한 여부 역시 and를 2번 사용하여 표현할 수 있다. 조건이 더 많아도 된다.

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

    코드1

}

점수 비교

A와 B의 수학과 영어의 점수를 입력받아 누가 더 높은지 비교하는 프로그램을 작성해주세요.

#include <iostream>
using namespace std;
int main(){
    int a1,a2,b1,b2;
    cin >> a1 >> a2 >> b1 >> b2;
    if ((a1 > b1) && (a2 > b2)) cout << 1;
    else    cout << 0;
    return 0;
}

범위 내 숫자인지 판별

숫자 a가 2 이상 10 이하 라는 조건은 어떻게 넣을 수 있을까?

2개 이상의 조건을 동시에 만족하는지를 알고 싶은 경우이므로 && (and) 를 사용해볼 수 있다.

if (2 <= a && a <= 10) {

   코드1

}

범위 안의 수

정수 a를 입력 받아 a가 10이상 20 이하인 수인지를 판단하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int a;
    cin >> a;
    if (10 <= a && a <= 20) cout<<"yes";
    else cout<<"no";
    return 0;
}

시력검사

양쪽눈의 시력을 실수(real number)로 입력받아 모두 1.0 이상이면 High, 모두 0.5 이상이면 Middle, 아니면 Low라고 출력하는 프로그램을 작성해주세요.

#include <iostream>
using namespace std;
int main(){
    double n,m;
    cin >> n >> m;
    if (n >= 1.0 and m >= 1.0)   cout<<"High";
    else if(n >= 0.5 && m >= 0.5) cout<<"Middle";
    else   cout<<"Low";
    return 0;
}

특정 조건 세 정수 비교

3개의 정수를 입력 받아 첫 번째 수가 가장 작으면 1 아니면 0을 출력하고, 세 개의 수가 모두 같으면 1 아니면 0 을 출력하는 프로그램을 작성해주세요.

#include <iostream>
using namespace std;
int main(){
    double a,b, c;
    cin >> a >> b >> c;
    cout << ((a<=b && a<=c) ? "1 ": "0 ");
    cout << ((a == b && b == c) ? 1 : 0);
    return 0;
}

가장 작다는 의미가 최솟값인지 여부기 때문에 같다를 붙여야 한다.


세 정수의 최솟값

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

#include <iostream>
using namespace std;
int main(){
    int  a, b, c, tmp;
    cin >> a >> b >> c;
    tmp = (a < b)? a : b;
    cout <<  (c < tmp ? c: tmp);
    return 0;
}

세 수의 중간값

세 수 a, b, c의 값이 주어졌을 때, b가 a보다 크고 c보다 작다면 1을, 그렇지 않다면 0을 출력하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int  a, b, c;
    cin >> a >> b >> c;
    if (a < b && b < c) cout<<1;
    else cout<<0;
    return 0;
}

or 기호


2개 이상의 조건들 중 하나라도 만족하는지를 알고싶은 경우라면, 다음과 같이 || (or) 를 사용하면 된다.

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

    코드1

}

3개의 조건 중 하나라도 만족하는지에 대한 여부 역시 || 를 2번 사용하여 표현할 수 있다. 조건이 더 많아도 된다.

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

    코드1

}

범위 밖의 수

정수 a를 입력받아 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;
}

숫자의 조건 여부 3

정수 a를 입력받았을 때 13의 배수이거나 19의 배수인 경우는 True, 그 외의 경우는 False를 출력하는 프로그램을 작성해주세요.

#include<iostream>
using namespace std;
int main(){
    int a;
    cin >> a;
    if(a%13 == 0 || a%19 == 0)  cout<<"True";
    else cout<<"False";
    return 0;
}

둘 중 하나의 배수

정수 a가 주어졌을 때, a가 3의 배수이거나 5의 배수인 경우에는 1을, 그렇지 않다면 0을 출력하는 프로그램을 작성해보세요.

#include<iostream>
using namespace std;
int main(){
    int a;
    cin >> a;
    if(a%3 == 0 || a%5 == 0)    cout << 1;
    else cout << 0;
    return 0;
}

and, or 혼합


숫자 a가 짝수거나 혹은 홀수이면서 동시에 10보다 크다면 이라는 조건은 어떻게 넣을 수 있을까?

1. a % 2 == 0
2. a % 2 == 1 && a >= 10
if ( a % 2 == 0 || (a % 2 == 1 && a >= 10) ) {
    코드1
}

and, or 연산자 우선순위

if (a % 2 == 0 || a % 5 == 0 && a % 7 == 0) {
    코드1
}

and는 or 보다 연산자 우선순위가 높기 때문에, 먼저 식을 계산하게 된다.


굉장한 숫자

자연수 n을 입력받아 n이 굉장한 숫자인지 판단하는 프로그램을 작성해보세요.

굉장한 숫자이기 위해서는 다음 두 조건 중 하나를 만족해야 합니다.

  • 홀수이면서 3의 배수인 수
  • 짝수이면서 5의 배수인 수
#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    if(n%2==1 && n%3 == 0||n%2==0 && n%5==0)    cout<<"true";
    else    cout<<"false";
    return 0;
}

if 조건 나열 순서의 중요성

  1. a가 홀수면서 5보다 작으면 A를 출력합니다.
  2. a가 홀수면서 5보다 같거나 크면 B를 출력합니다.
  3. a가 짝수면 C를 출력합니다.

이 문제를 주어진 순서 그대로 코드를 작성해보면 다음과 같다.

    if (a % 2 == 1 && a < 5) {
        cout << "A" << endl;
    }
    if (a % 2 == 1 && a >= 5) {
        cout << "B" << endl;
    }
    if (a % 2 == 0) {
        cout << "C" << endl;
    }

하지만 조건을 3, 1, 2 순으로 처리한다 생각하면 다음과 같이 코드를 간결하고 깔끔하게 작성할 수 있다.


    if (a % 2 == 0) {
        cout << "C" << endl;
    }
    else if (a < 5) {
        cout << "A" << endl;
    }
    else {
        cout << "B" << endl;
    }

이렇듯 조건을 어떤 순서로 나열하는지에 따라 코드의 복잡도가 달라진다.


숫자의 계절은

몇 월인지를 입력받아, 어떤 계절인지를 출력하는 프로그램을 작성해보세요.

35월이 봄, 68월이 여름, 911월이 가을, 122월이 겨울이라 가정합니다.

#include<iostream>
using namespace std;
int main(){
    int m;
    cin >> m;
    if(3<=m && m<6)    cout<<"Spring";
    else if(6<=m && m<9)    cout<<"Summer";
    else if(9<=m && m<12)    cout<<"Fall";
    else    cout<<"Winter";
    return 0;
}

장학금

중간고사를 90점 이상 받은 자들로 한해서, 기말고사 점수에 따라 장학금을 지급하기로 했습니다. 기말고사 점수가 100점 만점에 95점 이상은 10만 원, 90점 이상은 5만 원, 그 미만 점수는 받지 못합니다. 중간, 기말고사 점수를 입력했을 때 받을 수 있는 장학금을 출력하는 프로그램을 작성해주세요.

#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin >> a >> b;
    if (a>=90){
        if (b>=95)  cout<<100000;
        else if(b>=90)  cout<<50000;
        else cout<<0;
    }
    else cout<<0;
    return 0;
}

좀 더 어려운 수학 점수

이번 중간고사에는 영어보다 수학이 특별히 더 어려웠습니다. 학생 A와 B가 서로의 점수를 가지고 우선순위를 나누려고 합니다. 영어 점수와 상관없이 수학 점수가 높다면 더 높은 학생의 이름을 출력하고, 만약 수학 점수가 같다면 영어 점수가 더 높은 학생의 이름을 출력하려고 합니다. 두 학생의 수학 점수와 영어 점수가 주어질 때, 위의 조건을 만족하는 학생의 이름을 출력하는 프로그램을 작성해보세요. (단, 수학 점수와 영어 점수가 둘 다 동일하게 주어지는 경우는 없다고 생각해도 좋습니다.)

#include<iostream>
using namespace std;
int main(){
    int m1,e1,m2,e2;
    cin >> m1 >> e1 >> m2 >> e2;
    cout << (m1 == m2 ? (e1 > e2 ? "A" : "B") : (m1 > m2 ? "A" : "B"));
    return 0;
}

두 사람

두 사람에 대한 정보로 나이와 성별이 주어집니다. 두 사람 중 한 사람이라도 19세이상이면서 남자라면 1을 출력하는 프로그램을 작성해보세요.

#include<iostream>
using namespace std;
int main(){
    int o1,o2;
    char j1,j2;
    cin >> o1 >> j1 >> o2 >> j2;
    if(o1>18 && j1 == 'M' || o2>18 && j2 == 'M')    cout << 1;
    else cout<<0;
    return 0;
}

j1, j2는 문자type char을 이용했기 대문에 "가 아닌 '을 이용해야 한다