๋ฌธ์
https://www.acmicpc.net/problem/10819
๋ฐฑ์ค ๋ฌธ์ ์ง - ๋ํ์ ๊ธฐ๋ณธ๋ฐ
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ: ๋ธ๋ฃจํธํฌ์ค, ๋ฐฑํธ๋ํน
ํ์ด
N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด A๊ฐ ์ฃผ์ด์ง๋ค.
์ด๋, ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์์ ์์๋ฅผ ์ ์ ํ ๋ฐ๊ฟ์ ๋ค์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|
์ฒ์์ ๋ฌธ์ ๋ฅผ |A[0] - A[1]| + |A[2] - A[3]| + ... + |A[N-2] - A[N-1]| ๋ก ๋ดค์๋ค.
๊ทธ๋์ ํ ์๋ ๐ A ์ ๋ ฌ ํ (1๋ฒ์งธ๋ก ํฐ ๊ฐ - 1๋ฒ์งธ๋ก ์์ ๊ฐ, 2๋ฒ์งธ๋ก ํฐ ๊ฐ - 2๋ฒ์งธ๋ก ์์ ๊ฐ...) ๋ฐ๋ณตํ๊ธฐ.
๋ฌผ๋ก ๋ฌธ์ ์์ฒด๋ฅผ ์๋ชป ๋ดค๊ธฐ๋๋ฌธ์ ์ ๋๋ก ๋ ๋ต์ด ๋์ค์ง ์์๊ณ ^^;;
๊ฐ๋จํ๊ฒ permutations๋ก ์์ด์ ์์ฑํ๋ค ์ผ์ผ์ด ๋์
ํ๋ ๋ฐฉ์์ผ๋ก ํ์๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 31120KB / ์๊ฐ: 124ms
from sys import stdin
from itertools import permutations
input = stdin.readline
N = int(input())
A = list(map(int, input().split()))
ret = 0
for perm in permutations(A):
tmp = 0
for i in range(N-1):
tmp += abs(perm[i] - perm[i+1])
ret = max(ret, tmp)
print(ret)
124ms... ๋์์ง ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ 31120KB๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์คํ์๊ฐ์ด ์๋ฑํ ๋น ๋ฅธ ํ์ด๊ฐ ์์ ํ๋ฅ ์ด 99.9998%๋ค.
์๋๋ ๋ค๋ฅผ๊น 36ms์ธ ํ์ด๊ฐ ์กด์ฌํ๋ค.
๋งํฌ๋ ๐ https://www.acmicpc.net/source/82156215
๋ฐฉ์์ ๋ด๊ฐ ์ฒ์์ ์๋ํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ๋ค.
์ฃผ์ด์ง ๋ฆฌ์คํธ A๋ฅผ ์ ๋ ฌํ ํ, ๊ธธ์ด์ ์ ๋ฐ๊ฐ์ธ mid๋งํผ ํฐ ๊ฐ - ์์ ๊ฐ์ ๋ฐ๋ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ฐ๋ง ๊ตฌํด์ค๊ฒ์ด๋ฏ๋ก ๋๋จธ์ง ์ ๋ฐ์ ๋ํด์ค๋ค. (2๋ฐฐ๋ก ๊ณฑํ๊ธฐ)
๋ง์ง๋ง์ผ๋ก ์ ๋์๋ฆฌ์ ์ฌ ๋
์๋ค์ ํ๋จํ๋๊ฑด๋ฐ,
ํ์์ผ๋์ ์ง์์ผ๋์ ๊ฒฝ์ฐ๊ฐ ๋ค๋ฅด๋ค.
์ผ๋จ ์ ๋์ ์์นํ ์์๋ค์ ํ๋ฒ์ฉ๋ง ๊ณ์ฐ๋๋ ๊ตฌ์กฐ๋ค.
ํ์ง๋ง ์ฐ๋ฆฐ ๋๋ฒ์ฉ ๊ณ์ฐ๋๋๊ฑธ ๊ฐ์ ํด ๋๋ฐฐ๋ก ๊ณฑํด์ค ์ํ์ด๋ฏ๋ก, ์ ๋ ์์๋ค์ ์ฐจ์ด๊ฐ์ ํ๋ฒ ๋นผ์ค์ผํ๋ค.
์ง์์ผ ๊ฒฝ์ฐ, ๊ฐ์ด๋ฐ์ ์์นํ ๋ ์์ == ์ ๋์ ์์นํ ์์์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ๊ฐ์ด๋ฐ ๋ ์์์ ์ฐจ์ด๊ฐ์ ๋นผ์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง ํ์์ผ ๊ฒฝ์ฐ, ๊ฐ์ด๋ฐ ์ ์์ - ๊ฐ์ด๋ฐ ์์, ๊ฐ์ด๋ฐ ์์ - ๊ฐ์ด๋ฐ ๋ค์ ์์์ค ์ด๋ค ๊ฒฝ์ฐ๊ฐ ์ต์ ์ธ์ง ๋ชจ๋ฅธ๋ค.
๋ฐ๋ผ์ ๋ ๊ฒฝ์ฐ ์ค ์ฐจ์ด๊ฐ์ด ๋ ์์ ๊ฒฝ์ฐ์ ์์๋ฅผ ์ ๋์ ๋ฐฐ์นํ๋ค.
์ ์ฒด ์ฝ๋
# ์ฐธ๊ณ : https://www.acmicpc.net/source/82156215
from sys import stdin
input = stdin.readline
N = int(input())
A = list(map(int, input().split()))
A.sort()
mid = N // 2
ret = 0
for i in range(mid):
ret += A[N-i-1] - A[i]
ret *= 2
if N % 2 == 0:
ret -= A[mid] - A[mid-1]
else:
ret -= min(A[mid] - A[mid-1], A[mid+1] - A[mid])
print(ret)
๋๋ ์๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ ์๋ ์๋ค.
# ์ถ์ฒ: https://www.acmicpc.net/source/71412622
n = int(input())
a = sorted(list(map(int, input().split())))
min_val = a[0]
max_val = a[-1]
total = max_val - min_val
a = a[1:-1]
while len(a) > 0:
if len(a) != 1:
x = a[0]
y = a[-1]
total += max_val - x
total += y - min_val
max_val = y
min_val = x
a = a[1:-1]
else:
x = a[0]
total += max(max_val - x, x - min_val)
break
print(total)
์ฒซ๋ฒ์งธ ์ฝ๋๋ณด๋ค ์ข ๋ ์ง๊ด์ ์ด๋ค.
๊ธธ์ด๊ฐ ์ง์์ผ ๊ฒฝ์ฐ if์์ ์ฝ๋๋ง, ํ์์ผ๊ฒฝ์ฐ else๋ฌธ๊น์ง ์คํํ๋ค.