[Gold III] Title: IQ Test, Time: 44 ms, Memory: 32544 KB -BaekjoonHub

This commit is contained in:
SSUM
2025-04-03 01:02:23 +09:00
parent 9929cc86dd
commit 28f78ac3e9
2 changed files with 108 additions and 0 deletions

View File

@@ -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)

View File

@@ -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
### 문제 설명
<p>IQ Test의 문제 중에는 공통된 패턴을 찾는 문제가 있다. 수열이 주어졌을 때, 다음 수를 찾는 문제이다.</p>
<p>예를 들어, 1, 2, 3, 4, 5가 주어졌다. 다음 수는 무엇인가? 당연히 답은 6이다. 약간 더 어려운 문제를 보면, 3, 6, 12, 24, 48이 주어졌을 때, 다음 수는 무엇인가? 역시 답은 96이다.</p>
<p>이제 제일 어려운 문제를 보자.</p>
<p>1, 4, 13, 40이 주어졌을 때, 다음 수는 무엇일까? 답은 121이다. 그 이유는 항상 다음 수는 앞 수*3+1이기 때문이다.</p>
<p>은진이는 위의 3문제를 모두 풀지 못했으므로, 자동으로 풀어주는 프로그램을 작성하기로 했다. 항상 모든 답은 구하는 규칙은 앞 수*a + b이다. 그리고, a와 b는 정수이다.</p>
<p>수 N개가 주어졌을 때, 규칙에 맞는 다음 수를 구하는 프로그램을 작성하시오.</p>
### 입력
<p>첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. 이 수는 모두 절댓값이 100보다 작거나 같은 정수이다.</p>
### 출력
<p>다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다.</p>