이 문제에서는 여러 개의 숫자가 주어지며, C++의 삼항 연산자(ternary operator)를 사용해 가장 큰 수를 찾는 프로그램을 작성하는 것이 목표입니다.
주어지는 숫자의 개수는 다음과 같이 세 가지 경우로 나눌 수 있습니다.
- 두 개의 숫자
- 세 개의 숫자
- 네 개의 숫자
문제 설명 — 두 개, 세 개 또는 네 개의 숫자가 주어졌을 때, if문 대신 삼항 연산자만을 활용하여 그중 최댓값을 구해야 합니다.
예시를 통해 문제를 이해해 보겠습니다.
두 개의 숫자
입력 — 4, 54
출력 — 54
세 개의 숫자
입력 — 14, 40, 26
출력 — 40
네 개의 숫자
입력 — 10, 54, 26, 62
출력 — 62
해결 접근 방법
삼항 연산자는 조건식 ? 참일 때 값 : 거짓일 때 값 형태로 작성하며, 조건문을 한 줄로 간결하게 표현할 수 있습니다. 이를 중첩하면 세 개 이상의 숫자도 비교할 수 있습니다.
두 개의 숫자 (a, b) 비교
a > b ? a : b
세 개의 숫자 (a, b, c) 비교
(a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c)
a와 b 중 큰 값을 먼저 골라낸 뒤, 그 값과 c를 다시 비교하는 방식입니다.
네 개의 숫자 (a, b, c, d) 비교
(a > b && a > c && a > d) ? a :
(b > c && b > d) ? b :
(c > d) ? c : d
a가 나머지 세 수보다 모두 크면 a가 최댓값이고, 그렇지 않으면 b, c, d를 순차적으로 비교하여 최댓값을 결정합니다.
두 개의 숫자 비교 예제 코드
#include <iostream>
using namespace std;
int main() {
int a = 4, b = 9;
cout << "두 수 중 더 큰 값은 " << ((a > b) ? a : b);
return 0;
}
출력 결과
두 수 중 더 큰 값은 9
세 개의 숫자 비교 예제 코드
#include <iostream>
using namespace std;
int findMax(int a, int b, int c) {
int maxVal = (a > b) ?
((a > c) ?
a : c) :
((b > c) ?
b : c);
return maxVal;
}
int main() {
int a = 4, b = 13, c = 7;
cout << "세 수 중 더 큰 값은 " << findMax(a, b, c);
return 0;
}
출력 결과
세 수 중 더 큰 값은 13
네 개의 숫자 비교 예제 코드
#include <iostream>
using namespace std;
int findMax(int a, int b, int c, int d) {
int maxVal = ((a > b && a > c && a > d) ? a : (b > c && b > d) ? b : (c > d) ? c : d);
return maxVal;
}
int main() {
int a = 4, b = 13, c = 7, d = 53;
cout << "네 수 중 더 큰 값은 " << findMax(a, b, c, d);
return 0;
}
출력 결과
네 수 중 더 큰 값은 53
마무리
삼항 연산자를 중첩하면 if-else 문 없이도 간결하게 최댓값을 구할 수 있습니다. 다만 중첩이 깊어질수록 가독성이 떨어질 수 있으므로, 네 개 이상의 값을 비교할 때는 함수로 분리하거나 적절한 줄바꿈과 괄호를 사용해 코드를 정리하는 것이 좋습니다.