https://www.acmicpc.net/problem/1027
๋ฌธ์ ์ค๋ช
๋ฌธ์ ๋ฅผ ๋ฑ ๋ณด์๋ง์ ์์ ํ์์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ฑด๋ฌผ๋ค์ ํ๋์ฉ ๋น๊ตํ๋ฉฐ ์นด์ดํ ์ ํ ์ฝ๊ฒ ํ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค.
๋น๋ฉ์ ์๋ ์ ์ผ๋ 3์ค ๋ฐ๋ณต๋ฌธ๋ ์๊ฐ์ด๊ณผ๊ฐ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํด๊ฒฐ๊ณผ์
์ฒซํ์ด
n = int(input())
arr = list(map(int, input().split()))
for i in range(n):
cnt = 0
for j in range(n):
if i == j:
continue
target = abs(arr[j] - arr[i]) / abs(j - i)
start = min(i, j)
end = max(i, j)
flag = True
if end - start == 1:
if arr[i] >= arr[j]:
cnt += 1
continue
else:
continue
for k in range(start + 1, end):
if arr[i] < arr[j] or (arr[i]>=arr[j] and arr[k] >= arr[i]):
flag = False
continue
if abs(arr[j] - arr[k]) / abs(j - k) > target:
flag = False
continue
if flag:
cnt += 1
if i==2 and j==1:
print(flag)
print(cnt, end=" ")
# https://www.acmicpc.net/problem/1027
๋ช ๊ฐ์ ํ ์คํธ ์ฝ๋๋ ํต๊ณผํ๋ ๊ฑธ๋ก ๋ณด์ด์ง๋ง ์ฒซ ๋ฒ์งธ ํ ์คํธ ์ผ์ด์ค์์ ๊ฐ์ด ๋ง์ง ์์๋ค.
์ต๋๊ฐ์ด 7์ด ๋์์ผ ํ๋๋ฐ ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ๋๋ฆฌ๋ฉด 4๊ฐ ์ต๋์๋ค. ๊ฒฐ๊ณผ๊ฐ์ ํ์ธํด๋ณด๋ ๋ก์ง์ ์ด๋ ์ ๋ ๋ง๋ ๊ฒ ๊ฐ๋ค. ํ ๋ฒ ์ฝ๋๋ฅผ ์ ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ํ์ธํ๋ ์์ง ๋ด๊ฐ ์ฒซ ํ ์คํธ ์ผ์ด์ค์ ๋ต์ด ์ 7์ด ๋์ค๋์ง ์ ๋๋ก ์ดํด ๋ชปํ์๋ค. ํ๋ํ๋ ๊ฑด๋ฌผ๋ค์ ๊ทธ๋ ค๋ณด๋ ๋ด๊ฐ ๋์น๊ณ ์๋๊ฒ ์์๋ค. ๊ธฐ์ธ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๋ก์ง์ (i,j) ์ฌ์ด์ ์๋ k๊ฐ arr[i]>arr[k]>arr[j], arr[j]<arr[k]<arr[i] ์ ๊ด๊ณ์ ์์๋์ด๋ค.
ํ ๋ฒ ์ด๊ฑธ ๊ณ ๋ คํ์ฌ ๋ค์ ์์ฑํด๋ณด์
n = int(input())
arr = list(map(int, input().split()))
for i in range(n):
cnt = 0
for j in range(n):
if i == j:
continue
target = abs(arr[j] - arr[i]) / abs(j - i)
start = min(i, j)
end = max(i, j)
flag = True
if end - start == 1:
if arr[i] >= arr[j]:
cnt += 1
continue
else:
continue
for k in range(start + 1, end):
if arr[i] < arr[j] or (arr[i] >= arr[j] and arr[k] >= arr[i]):
flag = False
continue
if arr[k] >= arr[j] or arr[k] >= arr[i]:
continue
if abs(arr[j] - arr[k]) / abs(j - k) > target:
flag = False
continue
if flag:
cnt += 1
print(cnt, end=" ")
# https://www.acmicpc.net/problem/1027
์์ ๊ฐ์ด 7์ด ์ ๋์ค๋ ๊ฑธ ํ์ธํ๋ค.
๋ค๋ง ์ ์ฝ๋๋ก๋ 5๋ฒ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค.
์ ํ ์ผ์ ์ถ๋ ฅ์ด 6์ธ ์ด์ ๋ ์๋ง ์ฒซ๋ฒ์งธ ๊ฑด๋ฌผ์์ ๋ณด์ด๋ ๊ฑด๋ฌผ์ผ ๊ฒ์ด๋ค.
N = int(input())
building = list(map(int, input().split()))
answer = 0
for i in range(N):
temp = N - 1
for j in range(i+1, N):
for k in range(i+1, j):
if building[k] - building[i] >= (((building[j] - building[i])/(j-i)) * (k-i)):
temp -= 1
break
for j in range(0,i):
for k in range(j+1, i):
if building[k] - building[j] >= (((building[i] - building[j])/(i-j)) * (k-j)):
temp -= 1
break
answer = max(answer, temp)
print(answer)
์ต์ข ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ ํด๋ณด์๋ค