문제 링크
난이도 : 브론즈 5

문제 내용

두 양의 정수가 주어졌을 때, 첫 번째 수가 두 번째 수보다 큰지 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 두 정수가 주어진다. 두 수는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 두 개 주어진다.

출력

각 테스트 케이스마다, 첫 번째 수가 두 번째 수보다 크면 Yes를, 아니면 No를 한 줄에 하나씩 출력한다.

문제 분석

분석할게 없음

마지막 줄에 0이 나온다는걸 종료 조건으로 두기.

작성한 코드

// 250109
 
#include <iostream>
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    while(true) {
        int a, b;
        cin >> a >> b;
        if (a == 0 && b == 0){
            return 0;
        }
        if (a > b) cout << "Yes\\n";
        else cout << "No\\n";
    }
}

한 줄씩 다 받아오는 중이니까 cin/cout을 동기화 풀고 진행함

우수 코드 분석

#import<cstdio>
main(){
	int a,b;
		for(;scanf("%d%d",&a,&b);puts(a>b?"Yes":"No"))
		if(!a)break;
}

C++98 버전 사용하심

참고자료: https://codingadinga.tistory.com/2

puts는 오직 >>문자열<<만 출력하고, 줄 바꿈을 수행함

printf(”\n”)보다 puts(””); 가 더 빠르다고함.

그래서 puts 사용하신 듯?

for문에 특이하게 넣으셨길래 다시 한번 for문을 복습함.

참고자료 : https://boycoding.tistory.com/190

{
    초기식;

    while (condition-expression)
    {
        statement; // 반복할 명령문
        변화식;
    }
}

따라서, 위의 우수 코드 for문을 while문으로 변형하면 아래와 같이 됨.

{
	; // 초기식 X
	
	while (scanf(%d%d", &a, &b))
	{
		puts(a>b?"Yes":"No"));
	}
}

어떻게 while에 scanf를 사용할 수 있을까?

참고자료 : https://eteo.tistory.com/35

scanf의 반환값은 “함수가 읽어들여 저장에 성공한 데이터의 개수”이기 때문

⇒ 아무런 값도 받아오지 못했다면 return 0이므로 while문에서 빠져나오게 된다!

puts 안에는 삼항연산자를 사용하심. 딱히 버전에 상관없이 사용할 수 있는 듯?