문제 링크
난이도 : 브론즈 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 안에는 삼항연산자를 사용하심. 딱히 버전에 상관없이 사용할 수 있는 듯?