2 ๋ถ„ ์†Œ์š”

๋ฐฑ์ค€ ์‚ฌ์ดํŠธ ๋งํฌ

๋ฌธ์ œ

๋กœ๋‹ˆ ์ฝœ๋จผ ๋™์˜์ƒ์„ ๋ณด๊ณ  ๋ณด๋””๋นŒ๋”๊ฐ€ ๋˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•œ ํ–ฅ๋นˆ์ด๋Š” 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$์ด ์ตœ์†Œ์ผ ๋•Œ์ด๋‹ค.


ํ’€์ด

  1. ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ๋ฌด๊ฒŒ๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

  2. ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

  3. ๋ฐฐ์—ด์„ ์–‘์ชฝ ๋์—์„œ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋ฉฐ, ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ์ด T ์ดํ•˜์ธ ๋ฌด๊ฒŒ๋“ค์„ ์ฐพ๋Š”๋‹ค.
    • ์™ผ์ชฝ ํฌ์ธํ„ฐ๋Š” ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋Š” ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  4. ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋ฉฐ, ๊ฐ€์žฅ ๋งŽ์€ ๋ฌด๊ฒŒ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
    • ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ์กฐํ•ฉ์„ ํ™•์ธํ•œ๋‹ค.
    • ์ด๋™ํ•œ ๋ฌด๊ฒŒ์˜ ํ•ฉ์ด T๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋งŒ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.
    • ๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋‚˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.
  5. ๊ฐ€์žฅ ๋งŽ์€ ๋ฌด๊ฒŒ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ

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

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ