알고리즘 풀이/백준

[백준 1111] IQ Test

12.tka 2020. 12. 5. 16:36
728x90

문제 보기

 

[사용한 알고리즘]

구현

 

[문제 접근]

a값과 b값은 수식을 통해서 구할 수 있습니다. 만약 a, b값이 주어진 N개의 숫자를 모두 만족시키면 다음 수를 출력하고, 만족시키지 못하면 B를 출력합니다. 모든 숫자가 동일한 경우에는 동일한 숫자를 출력하고, N이 2보다 작은데 두 숫자가 다른 경우는 A를 출력하였습니다.

 

[알고리즘]

1. (array[2] - array[1]) // (array[1] - array[0]) 식으로 a 값을 구합니다. array[1] - array[0] * a 식으로 b값을 구합니다

2. a, b값으로 주어진 N개의 숫자를 모두 만족시키는지 확인합니다.

3. 모두 만족시키면 다음 수를 출력하고, 만족시키지 못하면 B를 출력합니다.

* N이 1이면 A, N이 2이고 두 숫자가 다르면 A를 출력합니다. 다음 수로 무수히 많은 값을 출력할 수 있기 때문입니다.

* 만약 array[1] - array[0] 값이 0이면 런타임 에러가 발생하므로 a값은 0, 자동적으로 b값은 array[1]값을 대입합니다.

 

[코드]

if __name__ == "__main__":
    n = int(input())
    array = list(map(int, input().split()))

    # 모든 수가 같으면 A 출력
    if n == 1:
        print("A")
    elif n == 2:
        if array[0] == array[1]:
            print(array[0])
        else:
            print("A")
    else:
        if array[1] - array[0] == 0:
            a = 0
            b = array[1]  # b = array[1] - array[0] * a이기 때문에
        else:
            a = (array[2] - array[1]) // (array[1] - array[0])
            b = array[1] - array[0] * a

        # a, b값이 패턴을 만족시키는지 확인
        flag = True
        for i in range(1, n):
            if array[i] == array[i - 1] * a + b:
                continue
            else:
                flag = False
                break

        if flag:
            print(array[n - 1] * a + b)
        else:
            print("B")
728x90