[백준] 1330번 : 두 수 비교하기 - [C++]
-
문제
워낙 크게 어렵지 않은 문제라 쉽게 풀 수 있었을 것이다.
- 알고리즘 [접근 방법]
이 번 문제는 두 수를 입력받은 뒤 서로 비교하여 연산자를 출력하면 되는 문제라 그리 어렵지 않을 것이다.
간단하게 의사코드로 풀이하면 다음과 같다.
int A = input();
int B = input();
if A > B then :
print(">");
else if A < B then :
print("<");
else :
print("==");
위의 로직을 갖고 하면 되나, 오늘은 그런 김에 '삼항연산자'에 대해 추가로 알아보고자 한다.
보통 C++로 풀이한다면 아래와 같이 풀이 했을 것이다.
int main() {
cin >> A >> B;
if(A > B) {
cout << ">";
}
else if(A < B) {
cout << "<";
}
else {
cout << "==";
}
}
물론 위와 같이 풀이해도 문제 없다.
하지만, 우린 어떤인간인가.. 어떤 것이든 줄이고 편한 것을 선호하는 것이 인간이 아닌가..
그래서 간단한 조건문의 경우에는 여러 줄을 쓰기 난잡하여 보기 싫어지니 이 if-else 문을 줄이려 한다.
기본적으로 사용 방법은 이렇다.
if( 조건식 ) {
[실행 코드 A] // 참일 때 실행코드
}
else {
[실행 코드 B] // 거짓 일 때 실행코드
}
이 구조를 약간만 변형하여 다음과 같이 만들 수 있다.
(조건식) ? [실행코드 A] : [실행코드 B]
쉽게 말해서 '조건식'이 참일 경우 A를 반환하고, 거짓일 경우 B를 반환하는 것이다.
잘 이해가 안된다면 아래 예시를 보자.
int main() {
int A, B, BIG;
cin >> A >> B;
if(A > B) {
BIG = A;
}
else {
BIG = B;
}
cout << BIG;
}
A와 B중 '큰 수'를 BIG 변수에 담아 출력하는 내용이다.
이를 아래와 같이 삼항연산자를 이용하여 더 간단하게 만들 수 있다.
int main() {
int A, B, BIG;
cin >> A >> B;
BIG = (A > B) ? A : B;
cout << BIG;
}
좀 더 깔끔해 보이지 않은가?
조금만 더 응용해보자.
이 번 문제에서 우리는 조건이 총 3가지 이다. 그럼 삼항연산자에서 3개의 조건을 어떻게 넣을까?
다시 한 번 우리가 평소에 쓰는 조건식을 파악해보자.
if( 조건식 ) {
[실행 코드 A] // 참일 때 실행코드
}
else {
[실행 코드 B] // 거짓 일 때 실행코드
}
여기서 '조건'을 하나 더 추가하려 한다면 우리는 'else if'를 쓰게 된다.
if( 조건식 1 ) {
[실행 코드 A] // 1번 조건식이 참일 때 실행코드
}
else if( 조건식 2 ){
[실행 코드 B] // 1번 조건식은 거짓이면서 2번 조건식은 참 일 때 실행코드
}
else {
[실행 코드 C]
}
즉, else if의 기본 전제는 '첫 번째 조건식에서 거짓일 때' 이다.
다시 삼항연산자로 돌아가보자.
(조건식) ? [실행코드 A] : [실행코드 B]
위에서 조건식이 참이면 A, 거짓이면 B라고 했다.
그러면 'else if' 조건에 해당하는 조건식을 B에 집어넣으면 되지 않을까?? 즉, 삼항 연산자 안에 삼항 연산자를 넣는다는 의미이다.
(조건식 1) ? [실행코드 A] : ((조건식 2) ? [실행코드 B] : [실행코드 C])
위와 같이 응용 할 수 있다는 것이다.
그럼 문제로 돌아가보자.
두 수 A와 B를 입력받고 그에 맞는 출력을 하라고 했다. 즉, 아래와 같은 코드를 작성하면 된다는 의미인데
int main() {
cin >> A >> B;
if(A > B) {
cout << ">";
}
else if(A < B) {
cout << "<";
}
else {
cout << "==";
}
}
위 코드를 삼항연산자로 변형한다면 어떻게 해야할까?
위 코드를 삼항연산자 규칙에 맞게 변형하면 이렇다.
int main() {
cin >> A >> B;
cout << ((A > B) ? ">" : ((A < B) ? "<" : "=="));
}
단 두 줄로 끝난다.
물론 삼항연산자가 간단한 조건식의 경우에는 가독성이 올라가기 때문에 좋지만, 너무 남발하게 되면 오히려 해석하기 어려운 경우도 있으니 본인이 편한 방식을 채택하면 된다.
- 2가지 방법을 사용하여 풀이한다.
이전 포스팅과 여타 다를 바 없이 아래와 같이 두 가지 입출력 방법을 이용하여 풀이하겠다. 또한 간단한 if-else문은 모두 작성할 줄 아실테니 이 번 문제는 모두 삼항연산자를 사용하여 풀이하도록 하겠다.
1. stdio
2. iostream
- 풀이
- 방법 1 : [stdio]
#include <stdio.h>
int main(int argc, char const *argv[])
{
int A, B;
scanf("%d %d", &A, &B);
printf("%s", (A > B) ? ">" : (A < B) ? "<" : "==");
return 0;
}
참고로 대부분 메이저 언어들은 형태는 조금씩 달라도 삼항연산자는 대부분 지원한다.
- 방법 2 : [iostream]
삼항연산자를 cout 으로 쓸 경우에는 하나 주의 할 것이 삼항연산자 부분을 괄호로 감싸주어야 한다.
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int A, B;
cin >> A >> B;
cout << ((A > B) ? ">" : (A < B) ? "<" : "==");
return 0;
}
크게 어려울 것은 없을 것이다.
- 성능
채점 번호 : 26832094 - 방법 2 : iostream
채점 번호 : 26832090 - 방법 1 : stdio
- 정리
오늘은 삼항연산자에 대해 같이 알아보았다.
어떤 성능에 차이가 있다거나 그런 것은 아니지만, 나중에 코드를 공유하거나 리뷰할 일이 있을 때 이러한 것을 익혀두면 상당히 많이 도움이 된다.
간단한 조건식의 경우에는 코드 줄이 길어지는 것보다 삼항연산자같이 간단한 수식을 통해 한 줄에 직관적으로 알아볼 수 있게 할 수 있기 때문이다.
물론 어떤 방식이 꼭 옳은 것은 아니기 때문에 여러분이 작성하면서 적절히 채용하면 되는 부분이다. (조건식이 복잡할 경우는 삼항연산자는 되도록 지양하는 것이 좋다. 오히려 가독성이 나빠진다.)
만약 어렵거나 이해가 되지 않은 부분이 있다면 언제든 댓글 남겨주시면 최대한 빠르게 답변드리겠다.
'C++ - 백준 [BAEK JOON] > 조건문' 카테고리의 다른 글
[백준] 2525번 : 오븐 시계 - [C++] (0) | 2022.07.24 |
---|---|
[백준] 2844번 : 알람 시계 - [C++] (2) | 2021.03.15 |
[백준] 1468번 : 사분면 고르기 - [C++] (0) | 2021.03.11 |
[백준] 2753번 : 윤년 - [C++] (0) | 2021.03.09 |
[백준] 9498번 : 시험 성적 - [C++] (6) | 2021.03.02 |