본문 바로가기

알고리즘/Python

IQ Test_백준1111

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

 

1111번: IQ Test

다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다.

www.acmicpc.net

n이 은 1~50인 자연수로 들어오는 숫자의 개수이다

n이 3보다 작은 경우에는 1,2가 있는데 1인경우에는 다음수가 어떤수가 올지 모르기 때문에 모든 수가 가능하다고 보고 A를 출력한다

2인 경우에도 a에 따라 b를 변화시키면 여러가지 경우의 수가 오기 때문에 A를 출력하지만 입력받은 두개의 수가 같다면 같은수가 계속 와야 하기 때문에 들어온 숫자를 출력한다

그 외인 경우에는 규칙을 찾아야 하는데 입력받은 숫자들의 차이로 배율 a를 구하고 여기서 구한 값을 이용하여 b를 구해 모든 수들이 같은 a , b를 가진다면 마지막 수에 a * 마지막 수 + b를 하여 답을 출력한다

만약 같은 a, b를 대입 했을때 성립하지 않는다면 B를 출력한다

def check(x,y,a,b): # 두 수가 a, b를 입력 받았을때 성립하는지 체크하는 함수
    if x * a + b == y:
        return False
    else:
        return True
n = int(input()) 
ar1 = list(map(int,input().split()))
ar2 = []

if(n < 3):
    if n == 2 and ar1[0] == ar1[1]:
        print(ar1[0])
        exit()
    print("A")
else:
    for i in range(n-1): 
        ar2.append(ar1[i+1] - ar1[i]) # 입력 받은 수들의 차이를 ar2배열에 입력
    if ar2[0] == 0: # 두 수의 차이가 0인 경우
        for i in range(n-1): # 모두 0인지 확인
            if ar2[i] != 0: # 모두 0이 아니라면 B출력 후 종료
                print("B")
                exit()
        print(ar1[0]) #모두 0인경우 입력받은 값 출력 후 종료
        exit()
    else:
        a = ar2[1] / ar2[0] # ar2배열에 있는 수들이 증가하는 비율이 a
        b =  ar1[1] - ar1[0] * a # a를 이용하여 b 구하기 a * x + b = y == b = y - (a * x)
        if (int(a) != a): # a는 무조건 정수여야 하기 때문에 정수가 아닌 경우 B 출력
            print("B")
            exit()
    for i in range(n-1): # ar1을 돌면서 맞는지 체크
        if(check(ar1[i],ar1[i+1],a,b)): # a, b가 성립하지 않은 경우
            print("B")
            key = 0
            exit()
    print(int(ar1[n-1] * a + b))

'알고리즘 > Python' 카테고리의 다른 글

행복 유치원_백준 13164_파이썬  (0) 2023.11.08
그리디 알고리즘_정올3521  (0) 2023.04.04
가희와 서울 지하철 3호선_백준27884  (0) 2023.04.04