이 영역을 누르면 첫 페이지로 이동
Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

페이지 맨 위로 올라가기

Stranger's LAB

프로그래밍과 관련하여 다양한 알고리즘 문제를 풀어보고, 프로그래밍 언어를 이해해 볼 수 있도록 돕고자 만든 블로그 입니다.

[백준] 1330번 : 두 수 비교하기 - [C++]

  • 2021.02.28 19:38
  • C++ - 백준 [BAEK JOON]/조건문
글 작성자: ST_
728x90





 
www.acmicpc.net/problem/1330

 

1330번: 두 수 비교하기

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

www.acmicpc.net

 

 









  • 문제



 

 

 

 

 

 

워낙 크게 어렵지 않은 문제라 쉽게 풀 수 있었을 것이다.

 

 

 

 

 

 

 

 

 





  • 알고리즘 [접근 방법]

 



 

 

이 번 문제는 두 수를 입력받은 뒤 서로 비교하여 연산자를 출력하면 되는 문제라 그리 어렵지 않을 것이다.

 

간단하게 의사코드로 풀이하면 다음과 같다.

 

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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 2844번 : 알람 시계 - [C++]

    [백준] 2844번 : 알람 시계 - [C++]

    2021.03.15
  • [백준] 1468번 : 사분면 고르기 - [C++]

    [백준] 1468번 : 사분면 고르기 - [C++]

    2021.03.11
  • [백준] 2753번 : 윤년 - [C++]

    [백준] 2753번 : 윤년 - [C++]

    2021.03.09
  • [백준] 9498번 : 시험 성적 - [C++]

    [백준] 9498번 : 시험 성적 - [C++]

    2021.03.02
다른 글 더 둘러보기

정보

Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

  • Stranger's LAB의 첫 페이지로 이동

검색

나의 외부 링크

  • st-github

공지사항

  • 공지 - 블로그 사용 설명서

메뉴

  • 홈
  • 방명록

카테고리

  • 전체 카테고리 (267)
    • Java (5)
    • JAVA - 백준 [BAEK JOON] (177)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (10)
      • 기본 수학 1 (8)
      • 기본 수학 2 (6)
      • 2차원 배열 (0)
      • 정렬 (10)
      • 재귀 (4)
      • 브루트 포스 (5)
      • 집합과 맵 (0)
      • 기하 1 (5)
      • 정수론 및 조합론 (12)
      • 백트래킹 (8)
      • 동적 계획법 1 (15)
      • 누적 합 (0)
      • 그리디 알고리즘 (5)
      • 스택 (5)
      • 큐, 덱 (7)
      • 분할 정복 (9)
      • 이분 탐색 (7)
      • 기타 문제 (17)
      • 별 찍기 문제 모음 (2)
    • C++ - 백준 [BAEK JOON] (46)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (0)
      • 기타 문제 (4)
    • 자료구조 (18)
      • Java (18)
    • 알고리즘 (11)
      • Java (11)
    • 프로그래밍 기초 (6)
    • 이모저모 (2)
    • 일상의 글 (2)

최근 글

정보

ST_의 Stranger's LAB

Stranger's LAB

ST_

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © ST_.

티스토리툴바