[Gold III] Title: IQ Test, Time: 44 ms, Memory: 32544 KB -BaekjoonHub
This commit is contained in:
70
백준/Gold/1111. IQ Test/IQ Test.py
Normal file
70
백준/Gold/1111. IQ Test/IQ Test.py
Normal 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)
|
||||
38
백준/Gold/1111. IQ Test/README.md
Normal file
38
백준/Gold/1111. IQ Test/README.md
Normal 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>
|
||||
|
||||
Reference in New Issue
Block a user