์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ธŒ๋ฃจํŠธํฌ์Šค

[๋ฐฑ์ค€ 2304 ๐Ÿฅˆ] ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•

1eehyunji 2023. 9. 15. 03:12

https://www.acmicpc.net/problem/2304

 

2304๋ฒˆ: ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•

์ฒซ ์ค„์—๋Š” ๊ธฐ๋‘ฅ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 1,000 ์ดํ•˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N ๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„์— ๊ฐ ๊ธฐ๋‘ฅ์˜ ์™ผ์ชฝ ๋ฉด์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ L๊ณผ ๋†’์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ H๊ฐ€ ํ•œ ๊ฐœ์˜

www.acmicpc.net

๋ฌธ์ œ

N ๊ฐœ์˜ ๋ง‰๋Œ€ ๊ธฐ๋‘ฅ์ด ์ผ๋ ฌ๋กœ ์„ธ์›Œ์ ธ ์žˆ๋‹ค. ๊ธฐ๋‘ฅ๋“ค์˜ ํญ์€ ๋ชจ๋‘ 1 m์ด๋ฉฐ ๋†’์ด๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธฐ๋‘ฅ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์–‘์ฒ ๋กœ ๋œ ์ฐฝ๊ณ ๋ฅผ ์ œ์ž‘ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ฐฝ๊ณ ์—๋Š” ๋ชจ๋“  ๊ธฐ๋‘ฅ์ด ๋“ค์–ด๊ฐ„๋‹ค. ์ด ์ฐฝ๊ณ ์˜ ์ง€๋ถ•์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค.

  1. ์ง€๋ถ•์€ ์ˆ˜ํ‰ ๋ถ€๋ถ„๊ณผ ์ˆ˜์ง ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•œ๋‹ค.
  2. ์ง€๋ถ•์˜ ์ˆ˜ํ‰ ๋ถ€๋ถ„์€ ๋ฐ˜๋“œ์‹œ ์–ด๋–ค ๊ธฐ๋‘ฅ์˜ ์œ—๋ฉด๊ณผ ๋‹ฟ์•„์•ผ ํ•œ๋‹ค.
  3. ์ง€๋ถ•์˜ ์ˆ˜์ง ๋ถ€๋ถ„์€ ๋ฐ˜๋“œ์‹œ ์–ด๋–ค ๊ธฐ๋‘ฅ์˜ ์˜†๋ฉด๊ณผ ๋‹ฟ์•„์•ผ ํ•œ๋‹ค.
  4. ์ง€๋ถ•์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๋•…์— ๋‹ฟ์•„์•ผ ํ•œ๋‹ค.
  5. ๋น„๊ฐ€ ์˜ฌ ๋•Œ ๋ฌผ์ด ๊ณ ์ด์ง€ ์•Š๋„๋ก ์ง€๋ถ•์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ์˜ค๋ชฉํ•˜๊ฒŒ ๋“ค์–ด๊ฐ„ ๋ถ€๋ถ„์ด ์—†์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆผ 1์€ ์ฐฝ๊ณ ๋ฅผ ์˜†์—์„œ ๋ณธ ๋ชจ์Šต์„ ๊ทธ๋ฆฐ ๊ฒƒ์ด๋‹ค. ์ด ๊ทธ๋ฆผ์—์„œ ๊ตต์€ ์„ ์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์ด ์ง€๋ถ•์— ํ•ด๋‹น๋˜๊ณ , ์ง€๋ถ•๊ณผ ๋•…์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๋‹ค๊ฐํ˜•์ด ์ฐฝ๊ณ ๋ฅผ ์˜†์—์„œ ๋ณธ ๋ชจ์Šต์ด๋‹ค. ์ด ๋‹ค๊ฐํ˜•์„ ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์ด๋ผ๊ณ  ํ•˜์ž.

๊ทธ๋ฆผ1 . ๊ธฐ๋‘ฅ๊ณผ ์ง€๋ถ•(๊ตต์€ ์„ )์˜ ์˜ˆ

์ฐฝ๊ณ  ์ฃผ์ธ์€ ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์˜ ๋ฉด์ ์ด ๊ฐ€์žฅ ์ž‘์€ ์ฐฝ๊ณ ๋ฅผ ๋งŒ๋“ค๊ธฐ๋ฅผ ์›ํ•œ๋‹ค. ๊ทธ๋ฆผ 1์—์„œ ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์˜ ๋ฉด์ ์€ 98 ใŽก์ด๊ณ , ์ด ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์ด๋‹ค.

๊ธฐ๋‘ฅ๋“ค์˜ ์œ„์น˜์™€ ๋†’์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€์žฅ ์ž‘์€ ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์˜ ๋ฉด์ ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ ์ค„์—๋Š” ๊ธฐ๋‘ฅ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 1,000 ์ดํ•˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N ๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„์— ๊ฐ ๊ธฐ๋‘ฅ์˜ ์™ผ์ชฝ ๋ฉด์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ L๊ณผ ๋†’์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ H๊ฐ€ ํ•œ ๊ฐœ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. L๊ณผ H๋Š” ๋‘˜ ๋‹ค 1 ์ด์ƒ 1,000 ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ ์ค„์— ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•์˜ ๋ฉด์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import sys

n=int(sys.stdin.readline())
# ์ „์ฒด ๊ธฐ๋‘ฅ์ด ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€ ์žˆ๋Š”์ง€
maxL=-1e9
# ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋‘ฅ ๋†’์ด
maxH=-1e9
# ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋‘ฅ ๋†’์ด์˜ ์ œ์ผ ๋’ค์ชฝ ์ธ๋ฑ์Šค
maxIndex=0
heights=[]
for _ in range(n):
    l,h=map(int, sys.stdin.readline().strip().split(' '))
    heights.append((l,h))
    if l>maxL:
        maxL=l
    if h>=maxH:
        maxH=h
        maxIndex=l

size=[0]*(maxL+1)
for l,h in heights:
    size[l]=h

left_ans=0
left_cur_max=0
for idx in range(maxIndex+1):
    if size[idx]>left_cur_max:
        left_cur_max=size[idx]
    left_ans+=left_cur_max

right_ans=0
right_cur_max=0
for idx in range(maxL,maxIndex,-1):
    if size[idx]>right_cur_max:
        right_cur_max=size[idx]
    right_ans+=right_cur_max

print(left_ans+right_ans)
  • ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ณด์ด๋Š” ๊ฑธ ๋ณด๋ฉด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋นˆ์ถœ ์œ ํ˜•์ด๊ธด ํ•œ๊ฐ€๋ณด๋‹ค!
  • ์šฐ์„ , ๋‚˜๋Š” ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋‘ฅ์ด ์œ„์น˜ํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋„“์ด์™€ ์˜ค๋ฅธ์ชฝ ๋„“์ด๋ฅผ ๋”ฐ๋กœ ๊ณ„์‚ฐํ–ˆ๋‹ค.
  • ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์˜ˆ์ œ 1๋ฒˆ์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์™ผ์ชฝ ๋„“์ด์˜ ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ํ˜„์žฌ ๊ธฐ๋‘ฅ๋ณด๋‹ค ๋” ๋†’์€ ๊ธฐ๋‘ฅ์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ๊ธฐ๋‘ฅ ๊ฐ’์„ left_ans ๊ฐ’์— ๋”ํ•ด์ฃผ๊ณ , ๋” ๋†’์€ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ํ˜„์žฌ ๊ธฐ๋‘ฅ ๊ฐ’์„ ๋” ๋†’์€ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ , ๋‹ค์‹œ ํ˜„์žฌ ๊ธฐ๋‘ฅ๋ณด๋‹ค ๋” ๋†’์€ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.

์˜ค๋ฅธ์ชฝ ๋„“์ด๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋”ํ•ด์ฃผ๋˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋‘ฅ ๊ฐ’์˜ ์ธ๋ฑ์Šค ์ „ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.