[백준/BOJ] 백준 10093번 : 숫자

2020. 8. 2. 04:35알고리즘 문제풀이

https://www.acmicpc.net/problem/10093

 

10093번: 숫자

문제 두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오. 입력 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 출력 첫째 줄에 �

www.acmicpc.net

a와 b를 입력받고 두 수 사이의 개수를 구한 뒤 두 수 사이의 값들을 구한다. 이 문제에서 주의해야 될 점은 a와 b가 매우 큰 수가 입력될 수 있으므로 long long 형 변수를 선언한 점과 a와 b가 같을 때 두 수 사이의 개수가 없다는 점과 a와 b 중 a가 더 클 수도 있다는 점이다. 

 

코드

#include <iostream>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	long long a, b; //a와 b에 입력될수 있는 수가 매우 커서 long long형으로 변수 선언을 하였다
	int num; //a와 b의 차이가 최대 100000이므로 num은 int형 변수로 해도 상관없다
	long long ab_min; //a와 b중 작은 수를 저장

	cin >> a >> b;

	//두 수가 값을때에는 두 수 사이에 개수가 없다(이때는 b-a-1 또는 a-b-1로 두 수 사이의 개수를 구할 수 없다)
	if (a == b)
		num = 0;

	else if (a < b)
	{
		ab_min = a;
		num = b - a - 1;
	}

	else if (a > b)
	{
		ab_min = b;
		num = a - b - 1;
	}

	cout << num << "\n";

	//ab_min+1부터 순서대로 num개를 출력한다
	for (long long i = ab_min + 1; i < ab_min + 1 + num; i++)
	{
		cout << i << " ";
	}

	return 0;
}