[BOJ]๋ฐฑ์ค€#11501 Silver 2 ์ฃผ์‹๐Ÿ’ฐ (Python, ํŒŒ์ด์ฌ)

์ž„์ค€์„ฑยท2022๋…„ 5์›” 28์ผ
0

๋ฐฑ์ค€ Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
20/59
post-thumbnail

๋ฐฑ์ค€ 11501๋ฒˆ
https://www.acmicpc.net/problem/11501


๋ฌธ์ œ



ํ›„๊ธฐ

โฐ ํ’€์ด์‹œ๊ฐ„ 2์‹œ๊ฐ„ ++โฐ

์ฒซ ๋‹จ์ถ”๋ฅผ ๊ต‰์žฅํžˆ ์ž˜๋ชป ์ฑ„์šด ๋ฌธ์ œ์˜€๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์ฃผ์‹์˜ list๋ฅผ ์•ž๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ

i์™€ i+1์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ์— ์ผ์ผ์ด ์ถ”๊ฐ€ํ•˜๋ฉฐ i+1์˜ ๊ฐ’์ด ๋” ์ž‘์„ ๋•Œ

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์‹์„ ์ „๋ถ€ ํŒ”์•„์„œ ์ˆ˜์ต์„ ๋งŒ๋“œ๋Š” ๊ต‰์žฅํžˆ 1์ฐจ์›์ ์ธ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Š” ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๊ณ , ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋“ค์€ ํ†ต๊ณผํ–ˆ์ง€๋งŒ, ์ผ๋ถ€ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด

์žˆ๋Š”์ง€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๊ณ„์† ๋‚˜์™”๋‹ค. ์•„์˜ˆ ๋ฐœ์ƒ์˜ ์ „ํ™˜์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๊ณ ,

๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘์–ด์„œ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋’ค์ง‘์€ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ ์งธ ๊ฐ’์„ max๋กœ ์ง€์ •ํ•ด๋†“๊ณ , list๋ฅผ ๋Œ๋ฉด์„œ i๊ฐ€ max๊ฐ’๋ณด๋‹ค ํฌ๋ฉด max๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ 

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ฃผ์‹์„ ํŒŒ๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋‹จ์ง€ ๋’ค์ง‘๊ธฐ๋งŒ ํ–ˆ์„ ๋ฟ์ธ๋ฐ, ๋ฌธ์ œ๊ฐ€ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ’€๋ฆฌ๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋„ ๊ต‰์žฅํžˆ ์•„๋ผ๋ฉฐ

์‹œ๊ฐ„๋„ ๋น„์•ฝ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ’€๋ฉด์„œ๋„ ์ž˜๋ชป๋œ ํ’€์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ๋Š” ์ˆœ๊ฐ„์—”, ์ข€ ๋” ๊ณ„์‚ฐ์ ์ธ ์ƒ๊ฐ์„ ํ•˜๋Š” ์Šต๊ด€์„

๋” ๊ฐ€์ง€๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

๋‚˜์˜ ์ž˜๋ชป๋œ ํ’€์ด

import sys

input = sys.stdin.readline

for _ in range(int(input())):

    N = int(input())

    li= list(map(int,input().split()))

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

    # i์™€ i+1์„ ๋น„๊ต. i+1๊ณผ ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ i+1์ด ๋” ํฌ๋ฉด ์ฃผ์‹์„ ๊ตฌ๋งคํ•œ๋‹ค.
    # i+1์˜ ๊ฐ’์ด ๋” ์ž‘์œผ๋ฉด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์‹์„ ์ „๋ถ€ ํŒ๋‹ค.

    buy_li = []
    sell_li = []

    for i in range(len(li)-1):

        
        if li[i]<=li[i+1]: #๊ฐ™๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด 

            buy_li.append(li[i])  #์ฃผ์‹ ๊ตฌ๋งค๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ 
        
        else:  #

            k = ( li[i] * len(buy_li) ) - sum(buy_li) #ํ•ด๋‹น ๋‚ ์งœ์˜ ์ฃผ์‹์˜ ๊ฐ€๊ฒฉ * (๊ตฌ๋งคํ•ด๋†“์€ ์ฃผ์‹์˜ list๊ธธ์ด) - ๊ตฌ๋งคํ•ด๋†“์€ ์ฃผ์‹๋“ค์˜ ๊ฐ€๊ฒฉ 

            sell_li.append(k)  #์–ผ๋งˆ ์ด๋“๋ดค๋Š”์ง€ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ 

            buy_li = []

            k=0
        
    if (len(buy_li))!=0:  # ๊ณ„์† ๊ตฌ๋งค๋งŒ ํ•˜๋‹ค๊ฐ€ ๋๋‚ฌ์„ ๋•Œ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ 

        k = ( li[-1] * len(buy_li) ) - sum(buy_li)  #๋งˆ์ง€๋ง‰ ๋‚ ์งœ์˜ ๊ฐ€๊ฒฉ์— ๋Œ€ํ•ด์„œ ์ˆ˜์ต์‹คํ˜„

        sell_li.append(k)

        buy_li = []

        k= 0

    if sum(sell_li) <=0:
        print(0)
    
    else:
        print(sum(sell_li))  




๋‚˜์˜ ํ’€์ด

import sys

input = sys.stdin.readline

for _ in range(int(input())):

    N = int(input())

    li= list(map(int,input().split()))

    result = 0 #๊ฒฐ๊ณผ๊ฐ’ 

    li.reverse()  #๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘๊ณ  

    max_li = li[0] #์ผ๋‹จ ๋งจ์•ž์˜ ๊ฐ’์ด ์ตœ๋Œ€๊ฐ’ 

    for i in li:

        if i > max_li: #์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹  

            max_li = i
        
        else:
            
            result += (max_li) -i #์ž‘์œผ๋ฉด ํŒ๋‹ค. 
    
    print(result)
profile
์•„๋ฌด๋ตํฌ ์žˆ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€