코드업 C언어 기초 100제에서 [기초-삼항연산] 풀기
(단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.)
(두 정수가 공백을 두고 입력되며, 두 정수 중 큰 값을 10진수로 출력한다.)
#include <stdio.h>
int main() {
int i, j;
scanf("%d %d", &i, &j);
printf("%d", i > j ? i : j);
return 0;
}
(단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.)
(3개의 정수가 공백으로 구분되어 입력되고, 가장 작은 값을 출력한다.)
#include <stdio.h>
int main() {
int i, j, k;
scanf("%d %d %d", &i, &j, &k);
printf("%d", (i < j ? i : j) < k ? (i < j ? i : j) : k);
return 0;
}
정답 여부: O
해설
[정수 3개를 입력받은 3항 연산자]
결론: 2개 먼저 골라낸 후 그 값과 나머지 하나 골라내기
정수가 a b c가 있다고 가정하고 a=10 b=20 c=30을 대입했다고 가정a < b ? a : b → a와 b 중 더 작은 것을 출력
a or b < c ? a or b : c → 위에서 나온 결과와 c 중 더 작은 것을 출력a와 b를 비교하는 식 만으로는 a가 더 큰지 b가 더 큰지를 알 수 없음. → a = 10 b =20이라는 값이 존재해야 우리가 알 수 있음.
하지만 이 상태에서는 모르니깐 a < b ? a : b 자체를 하나의 변수로 취급하는 것 → 결국 a와 b에 값이 들어가면 알아서 비교가 될 것.결국 a < b ? a : b와 c의 크기를 비교해야 함.
→ (a < b ? a : b) < c ? (a < b ? a : b) : c
1) 3항 연산을 할 때는 식을 그대로 써줘야 하는게 뭔 고등학교 때 하던 수학이 생각났다. 으으