์•Œ๊ณ ๋ฆฌ์ฆ˜/Greedy

[๋ฐฑ์ค€ 11501 ๐Ÿฅˆ] ์ฃผ์‹

1eehyunji 2023. 10. 7. 19:31

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

 

11501๋ฒˆ: ์ฃผ์‹

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ณ„๋กœ ์ฒซ ์ค„์—๋Š” ๋‚ ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ N(2 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ๋‚  ๋ณ„ ์ฃผ๊ฐ€๋ฅผ ๋‚˜ํƒ€

www.acmicpc.net

๋ฌธ์ œ

ํ™์ค€์ด๋Š” ์š”์ฆ˜ ์ฃผ์‹์— ๋น ์ ธ์žˆ๋‹ค. ๊ทธ๋Š” ๋ฏธ๋ž˜๋ฅผ ๋‚ด๋‹ค๋ณด๋Š” ๋ˆˆ์ด ๋›ฐ์–ด๋‚˜, ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์–ธ์ œ๋‚˜ ๊ทธ๊ฒŒ ๋งž์•„๋–จ์–ด์ง„๋‹ค. ๋งค์ผ ๊ทธ๋Š” ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•œ ํ–‰๋™์„ ํ•œ๋‹ค.

  1. ์ฃผ์‹ ํ•˜๋‚˜๋ฅผ ์‚ฐ๋‹ค.
  2. ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์‹์„ ํŒ๋‹ค.
  3. ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•œ๋‹ค.

ํ™์ค€์ด๋Š” ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ๋›ฐ์–ด๋‚œ ์•ˆ๋ชฉ์„ ๊ฐ€์กŒ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ž์‹ ์ด ์ตœ๋Œ€ ์ด์ต์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹น์‹ ์—๊ฒŒ ๋‚  ๋ณ„๋กœ ์ฃผ์‹์˜ ๊ฐ€๊ฒฉ์„ ์•Œ๋ ค์ฃผ์—ˆ์„ ๋•Œ, ์ตœ๋Œ€ ์ด์ต์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๊ณ„์‚ฐ์„ ํ•ด๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚  ์ˆ˜๊ฐ€ 3์ผ์ด๊ณ  ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๊ฐ€ 10, 7, 6์ผ ๋•Œ, ์ฃผ๊ฐ€๊ฐ€ ๊ณ„์† ๊ฐ์†Œํ•˜๋ฏ€๋กœ ์ตœ๋Œ€ ์ด์ต์€ 0์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๊ฐ€ 3, 5, 9์ผ ๋•Œ๋Š” ์ฒ˜์Œ ๋‘ ๋‚ ์— ์ฃผ์‹์„ ํ•˜๋‚˜์”ฉ ์‚ฌ๊ณ , ๋งˆ์ง€๋ง‰๋‚  ๋‹ค ํŒ”์•„ ๋ฒ„๋ฆฌ๋ฉด ์ด์ต์ด 10์ด ๋œ๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ณ„๋กœ ์ฒซ ์ค„์—๋Š” ๋‚ ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ N(2 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ๋‚  ๋ณ„ ์ฃผ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‚  ๋ณ„ ์ฃผ๊ฐ€๋Š” 10,000์ดํ•˜๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ณ„๋กœ ์ตœ๋Œ€ ์ด์ต์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹ต์€ ๋ถ€ํ˜ธ์žˆ๋Š” 64bit ์ •์ˆ˜ํ˜•์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • ์ตœ๋Œ€ ์ˆ˜์ต์„ ์–ป์œผ๋ ค๋ฉด, ์ฃผ๊ฐ€๊ฐ€ ์ตœ๊ณ ๊ฐ€๋ณด๋‹ค ๋‚ฎ์„ ๋•Œ ์‚ฌ์„œ ์ตœ๊ณ ๊ฐ€ ์ผ๋•Œ ํŒ”์•„์•ผ ํ•œ๋‹ค.
  • ์ฃผ๊ฐ€ ๋ฐฐ์—ด์˜ ์•ž์—์„œ๋ถ€ํ„ฐ ๋’ค์— ๋‚จ์€ ์ฃผ๊ฐ€ ์ค‘ ์ตœ๊ณ ๊ฐ€๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‚ ์˜ ์ˆ˜ N์ด ์ตœ๋Œ€ 1,000,000์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ฃผ๊ฐ€ ๋ฐฐ์—ด์˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ์•ž์œผ๋กœ ์ตœ๊ณ ๊ฐ€(max_price)๋ฅผ ๊ฐฑ์‹ ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ํ˜„์žฌ ๋‚ ์˜ ์ฃผ๊ฐ€(prices[d])๊ฐ€ ์ตœ๊ณ ๊ฐ€๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด (์ตœ๊ณ ๊ฐ€-ํ˜„์žฌ ์ฃผ๊ฐ€)๋ฅผ ์ด์ต(profit)์— ๋”ํ•ด์ค€๋‹ค.
  • ์ตœ๊ณ ๊ฐ€๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—” ์ตœ๊ณ ๊ฐ€๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  • ๋งจ ๋’ท๋‚ ๋ถ€ํ„ฐ ๋งจ ์•ž๋‚ ๊นŒ์ง€ ์ด์ต์„ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ  ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ณ„๋กœ ๊ณ„์‚ฐํ•œ ์ด์ต์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 
import sys

t=int(sys.stdin.readline())
for _ in range(t):
    days=int(sys.stdin.readline())
    prices=list(map(int, sys.stdin.readline().split(' ')))
    max_price=0
    profit=0
    for d in range(days-1,-1,-1):
        if prices[d]>max_price:
            max_price=prices[d]
        elif prices[d]<max_price:
            profit+=(max_price-prices[d])
    print(profit)