From 28f78ac3e98ba9b2f7d02d4cdae7ea7efacbd62a Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:02:23 +0900 Subject: [PATCH] [Gold III] Title: IQ Test, Time: 44 ms, Memory: 32544 KB -BaekjoonHub --- 백준/Gold/1111. IQ Test/IQ Test.py | 70 ++++++++++++++++++++++++++++++ 백준/Gold/1111. IQ Test/README.md | 38 ++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 백준/Gold/1111. IQ Test/IQ Test.py create mode 100644 백준/Gold/1111. IQ Test/README.md diff --git a/백준/Gold/1111. IQ Test/IQ Test.py b/백준/Gold/1111. IQ Test/IQ Test.py new file mode 100644 index 0000000..d005980 --- /dev/null +++ b/백준/Gold/1111. IQ Test/IQ Test.py @@ -0,0 +1,70 @@ +import sys + +input = sys.stdin.readline + +n = int(input()) +arr = list(map(int, input().split())) + +if n == 1: + print('A') +elif n == 2: + # n이 2일 때 두 수가 같으면 그 수, 다르면 A를 출력 + if arr[0] == arr[1]: + print(arr[0]) + else: + print('A') +elif arr[1] == arr[0]: + flag = False + for i in range(1, n): + if arr[i] != arr[0]: + flag = True + if flag: + print('B') + else: + print(arr[0]) +elif n > 2 and arr[2] - arr[1] == arr[1] - arr[0]: + d = arr[1] - arr[0] + flag = False + for i in range(1, n): + if arr[i] - arr[i-1] != d: + flag = True + if flag: + print('B') + else: + print(arr[n-1] + d) +elif n > 2 and arr[0] != 0 and arr[1] % arr[0] == 0 and arr[1] != 0 and arr[2] % arr[1] == 0 and arr[2] // arr[1] == arr[1] // arr[0]: + # 등비수열 체크 (정확히 나누어 떨어지는지 확인) + r = arr[1] // arr[0] + flag = False + for i in range(1, n): + if arr[i-1] == 0 or arr[i] % arr[i-1] != 0 or arr[i] // arr[i-1] != r: + flag = True + break + if flag: + print('B') + else: + print(arr[n-1] * r) +else: + # 일반항 검사 전에 0으로 나누는 경우 방지 + if arr[1] - arr[0] == 0: + print('B') + exit() + + # 나눗셈이 정확히 떨어지는지 확인 + if (arr[2] - arr[1]) % (arr[1] - arr[0]) != 0: + print('B') + exit() + + a = (arr[2] - arr[1]) // (arr[1] - arr[0]) + b = arr[1] - arr[0] * a # 직접 계산 + + flag = False + for i in range(1, n): + if arr[i] != arr[i-1] * a + b: + flag = True + break + + if flag: + print('B') + else: + print(arr[n-1] * a + b) diff --git a/백준/Gold/1111. IQ Test/README.md b/백준/Gold/1111. IQ Test/README.md new file mode 100644 index 0000000..ebede6c --- /dev/null +++ b/백준/Gold/1111. IQ Test/README.md @@ -0,0 +1,38 @@ +# [Gold III] IQ Test - 1111 + +[문제 링크](https://www.acmicpc.net/problem/1111) + +### 성능 요약 + +메모리: 32544 KB, 시간: 44 ms + +### 분류 + +브루트포스 알고리즘, 많은 조건 분기, 구현, 수학 + +### 제출 일자 + +2025년 4월 3일 01:01:57 + +### 문제 설명 + +
IQ Test의 문제 중에는 공통된 패턴을 찾는 문제가 있다. 수열이 주어졌을 때, 다음 수를 찾는 문제이다.
+ +예를 들어, 1, 2, 3, 4, 5가 주어졌다. 다음 수는 무엇인가? 당연히 답은 6이다. 약간 더 어려운 문제를 보면, 3, 6, 12, 24, 48이 주어졌을 때, 다음 수는 무엇인가? 역시 답은 96이다.
+ +이제 제일 어려운 문제를 보자.
+ +1, 4, 13, 40이 주어졌을 때, 다음 수는 무엇일까? 답은 121이다. 그 이유는 항상 다음 수는 앞 수*3+1이기 때문이다.
+ +은진이는 위의 3문제를 모두 풀지 못했으므로, 자동으로 풀어주는 프로그램을 작성하기로 했다. 항상 모든 답은 구하는 규칙은 앞 수*a + b이다. 그리고, a와 b는 정수이다.
+ +수 N개가 주어졌을 때, 규칙에 맞는 다음 수를 구하는 프로그램을 작성하시오.
+ +### 입력 + +첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. 이 수는 모두 절댓값이 100보다 작거나 같은 정수이다.
+ +### 출력 + +다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다.
+