C++ 알고리즘 기초11 -조건문 배우기2(삼항연산, if-else if-else)

1. 삼항연산자

 

if - else로만 이루어져 있는 다음과 같은 구문은

 

if (조건) {
    
    a = v1;

}

else {
    
    a = v2;

}

 

삼항연산자를 이용해서 한 줄에 표현 가능하다.

 

a = (조건) ? v1 : v2;

 

조건이 참이면, a는 v1을 가지고, 조건이 거짓이면, v2를 가진다는 의미다.

 

#include <iostream>
using namespace std;

int main() {
    
    int a,n;
    
    n = 8;
    
    // a = 2 + 6 + n < 10 ? 5: 6; >> a = 6
    a = 2 + 6 + (n < 10 ? 5:6);
    
    cout << a;
    return 0;

}
13

 

참고로 a = 2 + 6 + n  < 10 ? 5:6;은 a = 6이다.

 

왜냐하면 2+6+n < 10이 하나의 조건이라서

 

n < 10이 조건이 되길 원한다면... a = 2+6 + (n < 10 ? 5:6);으로 적절한 괄호가 필요하다.

 

다음은 두 값중 더 큰 값을 삼항연산자를 이용해서 구하는 코드

 

#include <iostream>
using namespace std;

int main() {
    
    int a,b;

    cin >> a >> b;

    int m = a > b ? a : b;

    cout << m;

    return 0;
}

 

2. 연습문제

 

정수 a가 주어졌을 때, a가 1이라면 t 를 출력하고, 1이 아니라면 f 를 출력하는 프로그램 삼항연산자를 사용하여 작성해보세요.

 

char로 선언한 변수는 작은따옴표 ''으로 묶어준 값만 받는다.

 

문자열은 큰따옴표 ""으로 묶어줘야한다.

 

안그러면 에러나더라

 

"A"는 string으로 인식하고.. char로는 인식 못한다는 소리

 

#include <iostream>
using namespace std;

int main() {
    
    int a;

    cin >> a;

    char b = a == 1 ? 't':'f';

    cout << b;

    return 0;
}

 

3. if - else if - else

 

if와 else 두 가지만으로 case를 나누는 것이 아니라, 세가지의 서로 겹치지 않는 case로 나누는 경우

 

else if라는 구문으로 상단 if 조건에 해당하지 않으면서, 해당 else if 조건에 해당하는 경우에만 특정 코드를 수행하게 만들 수 있다.

 

이때, else 블록에서는 if 조건과 else if 조건에 모두 해당하지 않는 경우에 코드를 수행한다.

 

if (조건1) {
    코드1
}

else if (조건2) {
   코드2
}

else {
    코드3
}

코드4

 

조건1이 참이라면, 코드1,4

 

조건1은 거짓이지만, 조건2가 참이라면 코드2,4

 

조건1,2가 모두 거짓이면, 코드3,4가 실행된다.

 

그리고 참고로, elif는 파이썬에서만 사용가능하다... 다른 언어는 else if

 

-----------------------------------------------------------------------------------------------------------

 

4. if - else if

 

else가 필요없다면, else를 굳이 사용할 필요는 없다.

 

#include <iostream>
using namespace std;

int main() {
    
    int a;
    cin >> a;
    
    if (a >= 10) {
        cout << "A" << endl;
    }
    else if (a >= 5) {
        cout << "B" << endl;
    }
    
    cout << "E";
    return 0;
}
20 
A
E

 

 

5. if - if - else if

 

if, if, else if를 사용한다면, 맨 끝에 있는 else if는 두번째 if하고만 쌍을 이룬다.

 

if (조건1) {
    코드1
}

if (조건2) {
   코드2
}

else if (조건3) {
    코드3
}

코드4

 

이제는 경험이 쌓였으니 이런 실수는 안하겠지..

 

조건1이 참이고 조건2가 참이면 코드1,2,4가 실행된다.

 

조건1을 검사해서 참이더라도, 조건 2는 반드시 검사한다는 소리

 

반면 조건2가 참이라면, 조건 3은 보지도 않고 코드 4로 넘어간다는 소리

 

#include <iostream>
using namespace std;

int main() {

	int a;

	cin >> a;

	if (a >= 10) {
		cout << "A" << endl;
	}

	if (a >= 15) {
		cout << "B" << endl;
	}
	else if (a >= 5) {
		cout << "C" << endl;
	}

	cout << "E";
	return 0;

}
20
A
B
E

 

 

6. 연습문제

 

2884번: 알람 시계 (acmicpc.net)

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

 

7. 풀이

 

시간과 분을 입력받고, 분에서 45를 빼준다.

 

t = m - 45가 0보다 작다면, 60을 더해서 양수로 바꿔주고, 시간 h에서 1을 빼준다.

 

그런데 h가 음수가 된다면, 24를 더해주고..

 

조금만 생각하면 안틀릴수 있는 문제

 

#include <iostream>
using namespace std;

int main() {

	int h, m;

	cin >> h >> m;

	int t = m - 45;

	if (t < 0) {
		t = t + 60;
		h -= 1;

		if (h < 0) {
			h += 24;
		}
	}

	cout << h << " " << t;

	return 0;
}
TAGS.

Comments