Algorithm/백준

[백준] 1065 with C++

nowkoes 2023. 2. 23. 00:59

문제설명


입출력 예제


개념

 수가 주어졌을 때 인접한 수가 등차수열을 이루는지 확인하는 문제다. 


풀이

#include <iostream>
using namespace std;

int main()
{
	int num;
	cin >> num;
	int count = 0;

 한수를 확인할 정수를 num으로 초기화시키고, 개수를 출력할 카운트 변수 count를 초기화해 준다.

 

	for (int i = 1; i <= num; i++)
	{
		if (isSequence(i))
			count++;
	}

	cout << count << endl;
}

 1부터 num까지 한수인지를 확인하는 함수를 실행시키고, 그 개수를 출력하게 하였다.

 

bool isSequence(int num)
{
	if (num <= 99)
		return true;

	else
	{
        	int digit[] = { num % 10, num % 100 / 10, num % 1000 / 100 };
		int a = digit[2] - digit[1];
		int b = digit[1] - digit[0];
		if (a == b)
			return true;
		else
			return false;
	}

}

 만약 입력된 정수의 자릿수가 2자리라면 항상 등차수열을 이루므로 true를 리턴한다. 연속된 두 개의 수의 차이를 구하려면 적어도 정수가 3자리이어야 하기 때문이다.

 3자리부터는 정수형 배열 digit에 각 자릿수를 할당한다. 주어진 문제에서 num은 1000보다 작은 자연수이므로 한수 수열의 개수는 2개(백의 자리와 십의 자리의 차, 십의 자리와 일의 자리의 차) 밖에 없다. 만약 한수 수열이 서로 같다면 true, 아니면 false를 반환하게 하였다.

 

총합본

#include <iostream>
#include <vector>
using namespace std;

bool isSequence(int num)
{
	vector<int> v;
	vector<int> res;

	if (num <= 99)
		return true;

	while (num != 0)
	{
		v.push_back(num % 10);
		num /= 10;
	}

	for (int i = 0; i < v.size() - 1; i++)
		res.push_back(v[i] - v[i + 1]);

	if (equal(res.begin() + 1, res.end(), res.begin()))
		return true;

	else
		return false;
}

int main()
{
	int num;;
	cin >> num;
	int count = 0;

	for (int i = 1; i <= num; i++)
	{
		if (isSequence(i))
			count++;
	}
	cout << count;
}
반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준] 2559 with C++  (0) 2023.02.27
[백준] 9375 with C++  (0) 2023.02.24
[백준] 1620 with C++  (0) 2023.02.22
[백준] 1940 with C++  (0) 2023.02.21
[백준] 3986 with C++  (0) 2023.02.20