[๋ฐฑ์ค 20300๋ฒ] [๐ฅ3] ์๊ฐ๊ทผ์ก๋งจ (python)
๋ฌธ์
๋ก๋ ์ฝ๋จผ ๋์์์ ๋ณด๊ณ ๋ณด๋๋น๋๊ฐ ๋๊ธฐ๋ก ๊ฒฐ์ฌํ ํฅ๋น์ด๋ PT ์๋ด์ ๋ฐ์ผ๋ฌ ์๊ฐํฌ์คํด๋ฝ์ ๊ฐ๋ค. ํฅ๋น์ด๊ฐ ์๊ฐํฌ์คํด๋ฝ์ ์ ํํ ์ด์ ๋ PT๋ฅผ ๋ฐ์ ๋ ์ฌ์ฉํ๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ํ์์ด ์ ํํ ์ ์๋ค๋ ์ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, ์๊ฐํฌ์คํด๋ฝ์ ํญ์ ์ฌ๋์ด ๋ง์์ PT๋ฅผ ํ ๋ฒ ๋ฐ์ ๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ์ต๋ ๋ ๊ฐ๊น์ง๋ง ์ ํํ ์ ์๋ค.
ํฌ์ค์ฅ์ ์๋ $N$๊ฐ์ ์ด๋๊ธฐ๊ตฌ๋ฅผ ํ ๋ฒ์ฉ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ ํฅ๋น์ด๋ PT๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ด์ ์ ์ฌ์ฉํ์ง ์์๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ์ ํํ๊ธฐ๋ก ๊ณํ์ ์ธ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ฉ์ ์ ์ฝํ๊ธฐ ์ํด PT๋ฅผ ๋ฐ์ ๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ๋๋๋ก์ด๋ฉด ๋ ๊ฐ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ์ค์ฅ์ ์ด $10$๊ฐ์ ์ด๋๊ธฐ๊ตฌ๊ฐ ์์ ๊ฒฝ์ฐ PT๋ฅผ $5$๋ฒ ๋ฐ์ผ๋ฉด ๋ชจ๋ ๊ธฐ๊ตฌ๋ฅผ ๋ค ์ฌ์ฉํ ์ ์๋ค. $9$๊ฐ์ ์ด๋๊ธฐ๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ PT๋ฅผ $5$๋ฒ ๋ฐ์ง๋ง, ๋ง์ง๋ง PT๋ฅผ ๋ฐ์ ๋๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ํ๋๋ง ์ฌ์ฉํ๋ค.
ํ์ง๋ง ํฅ๋น์ด๋ ์ด๋๊ธฐ๊ตฌ๋ฅผ ์ ํํ๋ค๊ฐ ํฐ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ์๋ํ๋ฉด ์ด๋๊ธฐ๊ตฌ๋ง๋ค ๊ทผ์์ค์ด ์ผ์ด๋๋ ์ ๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ค ์ด๋๊ธฐ๊ตฌ๋ ์๊ทน์ด ์ ์ ์์ ๊ทผ์์ค์ด ์ ๊ฒ ์ผ์ด๋๋๋ฐ, ์ด๋ค ์ด๋๊ธฐ๊ตฌ๋ ์๊ทน์ด ์ ์์ ๊ทผ์์ค์ด ๋ง์ด ์ผ์ด๋๋ค. ๊ทผ์์ค์ด ์ฃฝ์๋ณด๋ค ๋ฌด์์ด ํฅ๋น์ด๋ PT๋ฅผ ํ ๋ฒ ๋ฐ์ ๋์ ๊ทผ์์ค ์ ๋๊ฐ $M$์ ๋์ง ์๋๋ก ํ๊ณ ์ถ๋ค. ์ด๋, $M$์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์. ์ฐธ๊ณ ๋ก, ์ด๋๊ธฐ๊ตฌ๋ฅผ ๋ ๊ฐ ์ฌ์ฉํด์ PT๋ฅผ ๋ฐ์ ๋์ ๊ทผ์์ค ์ ๋๋ ๋ ์ด๋๊ธฐ๊ตฌ์ ๊ทผ์์ค ์ ๋์ ํฉ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ฐํฌ์คํด๋ฝ์ ๋น์น๋ ์ด๋๊ธฐ๊ตฌ์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ $N$์ด ์ฃผ์ด์ง๋ค. ($1 \leq N \leq 10\ 000$)
๋์งธ ์ค์๋ ๊ฐ ์ด๋๊ธฐ๊ตฌ์ ๊ทผ์์ค ์ ๋๋ฅผ ๋ํ๋ด๋ ์ ์ $t_1, t_2, \cdots, t_N$๊ฐ ์ฃผ์ด์ง๋ค. ($0 \leq t_i \leq 10^{18}$)
์ถ๋ ฅ
โ $M$์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
5
1 2 3 4 5
์์ ์ถ๋ ฅ 1
5
ํํธ
PT ์ฒซ์งธ ๋ ์ $1$๊ณผ $4$๋ฅผ ์ ํํ๊ณ , ๋์งธ ๋ ์ $2$์ $3$์ ์ ํํ๊ณ , ๋ง์ง๋ง ๋ ์ $5$๋ฅผ ์ ํํ๋ฉด $M$์ $5$๊ฐ ๋๋ฉฐ, ์ด๋๊ฐ $M$์ด ์ต์์ผ ๋์ด๋ค.
ํ์ด
-
์ ๋ ฅ์ ๋ฐ๊ณ , ๋ฌด๊ฒ๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
-
๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
- ๋ฐฐ์ด์ ์์ชฝ ๋์์๋ถํฐ ๋น๊ตํ๋ฉฐ, ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํฉ์ด T ์ดํ์ธ ๋ฌด๊ฒ๋ค์ ์ฐพ๋๋ค.
- ์ผ์ชฝ ํฌ์ธํฐ๋ ๊ฐ์ฅ ๊ฐ๋ฒผ์ด ๋ฌด๊ฒ๋ฅผ ๊ฐ๋ฆฌํค๊ณ , ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๋ฌด๊ฒ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉฐ, ๊ฐ์ฅ ๋ง์ ๋ฌด๊ฒ๋ฅผ ๋ค ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
- ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๊ณ , ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ์ฌ ๋ค์ ์กฐํฉ์ ํ์ธํ๋ค.
- ์ด๋ํ ๋ฌด๊ฒ์ ํฉ์ด T๋ณด๋ค ํฌ๋ค๋ฉด, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ง ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
- ๋ ํฌ์ธํฐ๊ฐ ๋ง๋๋ฉด ์ข ๋ฃํ๋ค.
- ๊ฐ์ฅ ๋ง์ ๋ฌด๊ฒ๋ฅผ ๋ค ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
ver(1)
์๊ฐ ๋ณต์ก๋๋ O(nlogn)
import sys
# ์
๋ ฅ๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ๋ฐ๊ธฐ ์ํด sys.stdin.readline์ ์ฌ์ฉํฉ๋๋ค.
input = sys.stdin.readline
# ์ ์ n์ ์
๋ ฅ๋ฐ์ต๋๋ค.
n = int(input())
# ์ ์๋ค์ ๋ฆฌ์คํธ t์ ์
๋ ฅ๋ฐ๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
t = list(map(int, input().split()))
t.sort()
k = 0
if (n % 2) == 1: # n์ด ํ์์ธ ๊ฒฝ์ฐ
# ์ค๊ฐ ๊ฐ๊ณผ ๋์นญ๋๋ ์์๋ค ์ค ํฐ ๊ฐ์ ์ ํํ์ฌ k์ ์ ์ฅํฉ๋๋ค.
for i in range((n-1) // 2):
k = max((t[i] + t[n-i-2]), k)
print(k)
else: # n์ด ์ง์์ธ ๊ฒฝ์ฐ
# ์ค๊ฐ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ข์ฐ ๋์นญ๋๋ ์์๋ค ์ค ํฐ ๊ฐ์ ์ ํํ์ฌ k์ ์ ์ฅํฉ๋๋ค.
for i in range(n // 2):
k = max((t[i] + t[n-i-1]), k)
print(k)
ver(2)
์๊ฐ ๋ณต์ก๋๋ O(nlogn)
import sys
# ์
๋ ฅ๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ๋ฐ๊ธฐ ์ํด sys.stdin.readline์ ์ฌ์ฉํฉ๋๋ค.
input = sys.stdin.readline
# ์ ์ n์ ์
๋ ฅ๋ฐ์ต๋๋ค.
n = int(input())
# ์ ์๋ค์ ๋ฆฌ์คํธ t์ ์
๋ ฅ๋ฐ๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
t = list(map(int, input().split()))
t.sort()
# ํฉ์ ์ ์ฅํ ๋ฆฌ์คํธ k์ ํฉ์ด ํ์์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์กฐ๊ฑด๋ฌธ์ ์ค์ ํฉ๋๋ค.
cnt = 0
k = []
if (len(t) % 2) == 1:
k.append(t.pop(-1))
# t ๋ฆฌ์คํธ์ ์์๋ค์ ์ํํ๋ฉฐ ๊ฐ์ฅ ํฐ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
for i in range(len(t)):
# t[i]๊ฐ t์ ๋์นญ๋๋ ์์๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ ๋ ์ด์ ๊ณ์ฐํ์ง ์๊ณ ์ข
๋ฃํฉ๋๋ค.
if t[i] > t[(len(t)-i-1)]:
break
# t[i]์ ๋์นญ๋๋ ์์์ ํฉ์ k ๋ฆฌ์คํธ์ ์ถ๊ฐํฉ๋๋ค.
k.append(t[i]+t[(len(t)-i-1)])
# k ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
print(max(k))
๋๊ธ๋จ๊ธฐ๊ธฐ