๐ŸŒฑ → ๐ŸŒณ

[Baekjoon] 11501๋ฒˆ. ์ฃผ์‹ - python ๋ณธ๋ฌธ

Algorithms

[Baekjoon] 11501๋ฒˆ. ์ฃผ์‹ - python

BAY 2024. 1. 9. 14:20
728x90

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

 

11501๋ฒˆ: ์ฃผ์‹

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

www.acmicpc.net

 

์ •๋‹ต์ฝ”๋“œ๋ถ€ํ„ฐ ๊ณต๊ฐœ

์ •๋‹ต์ฝ”๋“œ

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    nums.reverse()
    max = nums[0]
    sum = 0

    for i in range(1,n):
        if max < nums[i]:
            max = nums[i]
            continue
        sum += max - nums[i]
    print(sum)

์• ์ดˆ์— ๋ฐ˜๋ณต๋ฌธ์„ 2๋ฒˆ์ด์ƒ ๋Œ๋ฆฌ๋ฉด ์•ˆ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค

nums๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฝ์œผ๋ฉด์„œ max๋ณด๋‹ค ํฐ ๊ฐ’์ผ ๊ฒฝ์šฐ๋Š” max๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ 

max๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ๋Š” max์™€์˜ ์ฐจ์ด๋ฅผ sum์— ๋”ํ•ด์ฃผ๋ฉด ๋จ

 

 

์‚ฝ์งˆ ๊ธฐ๋ก .. 

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ์ฝ”๋“œ

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    tmp = [[] for _ in range(n)]
    answer = 0
    for i in range(n):
        for j in range(i):
            if nums[i] - nums[j] > 0:
                tmp[j].append(nums[i] - nums[j])
    for i in tmp:
        if len(i) != 0:
            answer += max(i)
    print(answer)

์ˆ˜์ • ํ›„ ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚จ (tmp์— appendํ•˜๋˜ ๋ฐฉ์‹ → ๊ทธ๋•Œ๋งˆ๋‹ค max๊ฐ’์„ ๊ตฌํ•˜๋„๋ก ์ˆ˜์ •)

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    tmp = [0 for _ in range(n)]
    answer = 0
    for i in range(n):
        for j in range(i):
            if nums[i] - nums[j] > 0:
                tmp[j] = max(tmp[j], nums[i] - nums[j])
    print(sum(tmp))

์•„์˜ˆ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์ •

 

์‹œ๊ฐ„์ดˆ๊ณผ

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    answer = 0
    while len(nums) > 0:
        m = max(nums)
        idx = nums.index(m)
        tmp = nums[:idx]
        nums = nums[idx+1:]
        for i in range(idx):
            answer += m - tmp[i]
    print(answer)

nums์—์„œ max ๊ฐ’์„ ์ฐพ๊ณ , tmp ๋ฆฌ์ŠคํŠธ์— nums์˜ 0๋ถ€ํ„ฐ max๊นŒ์ง€ ๋„ฃ์–ด๋‘ 

nums๋Š” max ์ดํ›„์˜ ๊ฐ’๋“ค์„ ๋„ฃ์–ด๋‘๊ณ  ๋ฐ˜๋ณต

์˜ˆ)

nums = [1, 2, 100, 90, 1, 2] ์ผ ๋•Œ,

[1, 2, 100

/, 90

/, 1, 2]

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆˆ ํ›„ max๊ฐ€ ์•„๋‹Œ ๊ฐ’๋“ค์€ max์—์„œ ๋บ€ ๊ฐ’์„ answer์— ๋”ํ•ด์คŒ

 

์‹œ๊ฐ„์ดˆ๊ณผ

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    answer = 0
    end = 0
    start = -1
    while end != n-1:
        m = max(nums[start+1:])
        end = nums.index(m)
        for i in range(start, end):
            answer += m - nums[i]
        start = end
    print(answer)

์œ„ ์ฝ”๋“œ์—์„œ nums list๋ฅผ ๊ณ„์† ๋งŒ๋“ค์ง€ ์•Š๊ณ , start์™€ end ๋งŒ๋“ค์–ด์„œ ๋น„๊ต

 

์‹œ๊ฐ„์ดˆ๊ณผ

k = int(input())
for _ in range(k):
    n = int(input())
    nums = list(map(int, input().split()))
    answer = 0
    for i in range(n):
        stock = []
        for j in range(i+1,n):
            if nums[i] < nums[j]:
                stock.append(nums[j]-nums[i])
        if len(stock) != 0:
            answer += max(stock)
    print(answer)

 

728x90