Taene's

[백준] 브론즈V-크냐? C++ 4101번 본문

백준/브론즈

[백준] 브론즈V-크냐? C++ 4101번

taene_ 2023. 8. 23. 10:04

문제

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

입력

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

출력

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

예제 입력 1 복사

1 19
4 4
23 14
0 0

예제 출력 1 복사

No
No
Yes

 

처음 소스코드:

#include <iostream>

using namespace std;

int main()
{
	int a, b;

	bool isZero = false;

	while (isZero==false)
	{
		cin >> a >> b;
		if (a == 0 && b == 0) {
			isZero = true;
		}
		if (a > b)
		{
			printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}
	}

	return 0;
}

최종 소스코드:

#include <iostream>

using namespace std;

int main()
{
	int a, b;

	while (cin >> a >> b)
	{
		if (a == 0 && b == 0) {
			break;
		}

		if (a > b)
		{
			printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}
	}

	return 0;
}

접근방법: 처음에는 bool로 (a,b)=(0,0)을 체크해서 구분하면 편하겠다 싶어서 그렇게 했었는데, while문을 쓰면 break로 빠져나오면 되니까 bool을 사용안하고도 로직이 이어질 수 있었다.

+ 꽤 많이 실패했는데 그 이유가 printf에 줄바꿈\n을 추가안해서... 자꾸 왜 틀리는거지 싶었다. 다음부턴 꼼꼼하게 보자!

 

ios::sync_with_stdio(false);
cin.tie(0);

알게된 점: 서칭하다가 다른 사람의 답변에 위의 두 줄이 추가되어 있어서 뭔지 찾아봤는데 위 코드를 작성하면 입출력 속도가 빨라져서 시간초과로 실패한 문제들을 성공시킬 수 있다고 한다. 다만 이 코드를 사용하면 기존 C의 표준 입출력인 scanf, printf, getchar 함수를 사용하면 오류가 발생할 수 있다고 한다. C++의 입출력인 cin, cout만 사용하도록 주의해야한다.