C++ 알고리즘 기초14 -조건문 심화-

1. else if

 

필요하다면 else if는 여러번 사용가능하다.

 

else if 당 상단 if와 모든 else if에 걸리지 않으면서 해당 else if 조건에 해당하는 경우에만 특정 코드를 수행하게 만들 수 있다.

 

if (조건1) {
    코드1
}
else if (조건2) {
    코드2
}
else if (조건3) {
    코드3
}
else {
    코드4
}
코드5

 

조건1, 조건2가 모두 거짓이고 조건 3이 참이라면, 코드 3, 코드 5만 수행된다

 

A반의 출석번호 1번은 John, 2번은 Tom, 3번은 Paul입니다. 번호를 입력하면 해당하는 학생의 이름을 출력하는 프로그램을 작성하세요.

 

만약, 해당 출석 번호에 해당하는 학생이 없다면 Vacancy라고 출력하세요.

 

#include <iostream>
using namespace std;

int main() {
    
    int n;

    cin >> n;

    if (n == 1) {
        cout << "John";
    } else if (n == 2) {
        cout << "Tom";
    } else if (n == 3) {
        cout << "Paul";
    } else {
        cout << "Vacancy";
    }
    return 0;
}

 

2. 조건문에서 꼭 기억해야할 점

 

다음과 같이 if / if로 조건문을 2번 이상 사용한다면, 각각의 조건문은 서로 관련이 없다

 

if (조건1) {
    코드1
}

if (조건2) {
    코드2
}

코드3

 

위와 같은 경우, 조건 1, 조건 2가 모두 참이라면, 코드는 코드1,2,3 모두 순서대로 수행된다.

 

조건 1이 참이고 조건2가 거짓이라면 코드1, 코드 3이 수행된다.

 

#include <iostream>
using namespace std;

int main() {

	int a;

	cin >> a;

	if (a % 2 == 0) {
		cout << "even" << endl;
	}

	if (a >= 5) {
		cout << "normal" << endl;
	}

	cout << "done";

	return 0;

}
10

even
normal
done

 

다음 처럼 if else / if else 도 조건문 구문을 2번 이상 사용한다면, 서로 관련이 없다

 

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

if (조건2) {
    코드2-1
}
else {
    코드2-2
}
코드3

 

위처럼 코드가 작성되어 있을때, 조건1,조건2가 모두 참이라면, 코드는 코드1-1, 코드 2-1, 코드 3이 모두 순서대로 수행된다.

 

2개의 정수 a, b를 입력받아 첫 번째 수의 짝홀 여부와, 두 번째 수의 짝홀 여부를 출력하는 프로그램을 작성해주세요.

 

#include <iostream>
using namespace std;

int main() {
    
    int a,b;

    cin >> a >> b;

    if (a % 2 == 0) {
        cout << "even" << endl;
    } else {
        cout << "odd" << endl;
    }

    if (b % 2 == 0){
        cout << "even";
    } else {
        cout << "odd";
    }
    return 0;
}

 

3. 비교연산자 혼합

 

&&와 ||은 서로 혼합해서 사용가능하다.

 

여기서 &&가 ||보다 우선순위가 높다. 필요하다면 괄호를 적절히 사용해서 계산해야한다.

 

숫자 n이 다음 두 조건중 하나를 만족하면 true, 아니라면 false를 출력하는 코드

 

1) "홀수이면서 3의 배수"

2) "짝수이면서 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;
}

 

4. 조건도 생각하면서 나열해야...

 

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;
}

 

조건을 어떤 순서대로 나열하는지에 따라 코드이 복잡도가 달라질 수 있어서, 조건 배치를 생각하면서 할 필요가 있다.

 

 

5. 들여쓰기는 보통 4칸

 

조건문 안에 조건문을 중첩해서 사용하는 것은 당연히 가능하며,

 

조건문 내부를 나타내는 부분은 중괄호 { }로 둘러싸줘야하고, 들여쓰기는 보통 공백 4칸(tab)을 사용

 

#include <iostream>
using namespace std;

int main() {

	int a;
	cin >> a;

	if (a % 2 == 1) {
		if (a >= 10) {
			cout << "A" << endl;
		}
		else {
			cout << "B" << endl;
		}
	}
	else {
		if (a >= 15) {
			cout << "C" << endl;
		}
		else {
			cout << "D" << endl;
		}
	}

	return 0;

}
5
B

 

6. 최댓값 구하기

 

세 정수 a,b,c를 입력받아 최댓값을 구하는 방법

 

각각 a,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 if (c >= a && c >= b){
        cout << c;
    }

    return 0;
}

 

7. 중앙값 구하기

 

세 정수 a,b,c를 입력받을 때, 중앙값을 구하는 방법

 

역시 각각이 중앙값이라 생각하고 모든 경우를 생각해서 조건문을 세우면 간단

 

a가 중앙값이라면, (a >= b이고 a <= c)이거나 (a >= c이고 a <=b)여야 한다

 

#include <iostream>
using namespace std;

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

    cin >> a >> b >> c;

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

 

8. 연습문제

 

2525번: 오븐 시계 (acmicpc.net)

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 

9. 풀이

 

원래 분 b에 요리 시간 c를 더해 분 t를 만들고, t를 60으로 나눈 몫을 시 a에 더해준다.

 

t를 60으로 나눈 나머지가 분 m이 되고,

 

시 a가 24 이상이 된다면, 24를 빼준 다음 a,m을 공백을 두고 출력하면 될 것

 

#include <iostream>
using namespace std;

int main() {

	int a, b, c;

	cin >> a >> b >> c;

	int t = b + c;

	a += t / 60;

	if (a >= 24) {
		a -= 24;
	}

	int m = t % 60;
	
	cout << a << " " << m;

	return 0;

}
TAGS.

Comments