백준 1111번 - IQ Test

박진형·2021년 5월 27일
0

algorithm

목록 보기
13/111

문제 풀이

n == 1 일때 답이 여러개로 나올 수 있으므로 A출력 .
n == 2 일때 arr[0]과 arr[1]이 같다면 arr[2]도 같을것 이므로 arr[0] 출력 그게아니라면 답이 여러개일 수 있으므로 A 출력.

ax0+b=x1, ax1+b=x2→a(x1−x0)=x2−x1 이므로

a = (arr[2] - arr[1]) / (arr[1] - arr[0]) 이다 0으로 나누어진다면 a = 0이고
b = arr[1] - arr[0] a 으로 나올 수 있다.
그 뒤 입력 받은 배열들을 모두 순회하면서 An = An-1
a + b 형식인지 아닌지 확인하고 아니라면 B출력
마지막으로 N번째 수열에 a를 곱하고 b를 더해서 출력하면 끝

문제 링크

boj/1111

소스코드

PS/1111.cpp

#include <string>
#include <vector>
#include<iostream>
#include<memory.h>
#include<map>
#include<algorithm>
#include<queue>
#include<set>
#include<math.h>
using namespace std;
int arr[51];
int main()
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	if (n <= 2)
	{
		if (n == 1)
			cout << "A";
		else if (n == 2)
		{
			if (arr[0] == arr[1])
				cout << arr[0];
			else
				cout << "A";
		}
		return (0);
	}
	int tmp = arr[1] - arr[0];
	int tmp2 = arr[2] - arr[1];
	int a;
	if (tmp != 0)
		a = tmp2 / tmp;
	else
		a = 0;
	int b = arr[1] - a *arr[0];
	for (int i = 2; i < n; i++)
	{
		if (arr[i] != arr[i-1] *a +b)
		{
			cout << "B";
			return (0);
		}
	}
	cout << arr[n - 1] *a +b;
	
}

0개의 댓글