๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ (DP)

๐ŸŽฎinspirer9 2023. 3. 2. 23:28
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ์ˆ˜์—ด์˜ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด์— ๊ฐ™์€ ๊ธธ์ด์˜ ํŽ„์Šค ์ˆ˜์—ด์„ ๊ฐ ์›์†Œ๋ผ๋ฆฌ ๊ณฑํ•˜์—ฌ ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋งŒ๋“ค๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํŽ„์Šค ์ˆ˜์—ด์ด๋ž€ [1, -1, 1, -1 …] ๋˜๋Š” [-1, 1, -1, 1 …] ๊ณผ ๊ฐ™์ด 1 ๋˜๋Š” -1๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ 1๊ณผ -1์ด ๋ฒˆ๊ฐˆ์•„ ๋‚˜์˜ค๋Š” ์ˆ˜์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์—ด [2, 3, -6, 1, 3, -1, 2, 4]์˜ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด [3, -6, 1]์— ํŽ„์Šค ์ˆ˜์—ด [1, -1, 1]์„ ๊ณฑํ•˜๋ฉด ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„์ˆ˜์—ด์€ [3, 6, 1]์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด [3, -1, 2, 4]์— ํŽ„์Šค ์ˆ˜์—ด [-1, 1, -1, 1]์„ ๊ณฑํ•˜๋ฉด ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„์ˆ˜์—ด์€ [-3, -1, -2, 4]์ด ๋ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ์ˆ˜์—ด sequence๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ sequence์˜ ๊ธธ์ด ≤ 500,000
  • -100,000 ≤ sequence์˜ ์›์†Œ ≤ 100,000
    • sequence์˜ ์›์†Œ๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

sequence result
[2, 3, -6, 1, 3, -1, 2, 4] 10

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ฃผ์–ด์ง„ ์ˆ˜์—ด์˜ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด [3, -6, 1]์— ํŽ„์Šค ์ˆ˜์—ด [1, -1, 1]์„ ๊ณฑํ•˜์—ฌ ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด [3, 6, 1]์„ ์–ป์„ ์ˆ˜ ์žˆ๊ณ  ๊ทธ ํ•ฉ์€ 10์œผ๋กœ์„œ ๊ฐ€์žฅ ํฝ๋‹ˆ๋‹ค.

ํ’€์ด

  • ์ด๊ฑฐ ์˜ค๋Š˜ ํ’€์—ˆ๋˜ ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ (2) ๋ฌธ์ œ๋ž‘ ๋น„์Šทํ•˜๋‹ค. ์™„์ „ ์šด์œผ๋กœ ํ’€์—ˆ๋„ค ใ…Žใ…Žใ…Ž
def solution(sequence):
    answer = 0
    n = len(sequence)
    dp = [0] * n
    dp[0] = sequence[0]
    
    if n == 1:
        return max(dp[0]*-1, dp[0])
    else:
        for i in range(1, n, 2):
            sequence[i] *= -1
        dp[0] = sequence[0]
        for i in range(1, n):
            dp[i] = max(sequence[i], sequence[i] + dp[i-1])
        answer = max(dp)

        for i in range(n):
            sequence[i] *= -1
        dp[0] = sequence[0]
        for i in range(1, n):
            dp[i] = max(sequence[i], sequence[i] + dp[i-1])
        answer = max(answer, max(dp))

    return answer
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.00ms, 10.2MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.06ms, 10.1MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.49ms, 10.3MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.62ms, 10.2MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (5.94ms, 10.4MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (7.31ms, 10.7MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (74.73ms, 17.7MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (93.50ms, 17.7MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (79.86ms, 17.4MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (68.00ms, 17.7MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (64.65ms, 18.9MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (404.85ms, 48.2MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (389.38ms, 48.6MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (412.56ms, 56.1MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (344.72ms, 56MB)
  • ์–ด... ์šฐ์™€?
def solution(sequence):
    a1, a2 = -111111, -111111
    s1, s2 = 0, 0
    sign = [-1,1]
    for i, s in enumerate(sequence):
        s1 += s * sign[i%2]
        s2 += s * sign[(i+1)%2]
        a1 = max(s1,a1)
        a2 = max(s2,a2)
        s1 = max(0,s1)
        s2 = max(0,s2)
    return max(a1,a2)
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.02ms, 10MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.06ms, 10.3MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.35ms, 10.3MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.70ms, 10.1MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (3.64ms, 10.3MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (6.96ms, 10.4MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (70.10ms, 13.9MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (71.70ms, 14.1MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (70.91ms, 14.2MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (72.48ms, 14.1MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (71.04ms, 14.1MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (352.71ms, 31.3MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (348.84ms, 31.2MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (344.66ms, 31.6MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (341.89ms, 31.8MB)
  • ๋น ๋ฆ„
def solution(sequence):

    # 1 ๋ถ€ํ„ฐ ์—ฐ์†ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ณฑํ•œ๊ฐ’ ์ฐพ๊ธฐ prefix sum ๋งŒ๋“ค๊ธฐ 
    # maxV - minV 
    # ๊ฐ๊ฐ์˜ ๋ฆฌ์ŠคํŠธ์—์„œ max()
    answer = 0
    prefixS = [0]
    for i in range(len(sequence)):
        pulse = 1 if i%2 ==0  else -1
        prefixS.append(prefixS[-1]+pulse*sequence[i])

    return abs(max(prefixS) - min(prefixS))
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.10ms, 10.1MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.39ms, 10MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (1.07ms, 10.5MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (2.20ms, 10.6MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (23.09ms, 17.8MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (22.49ms, 17.8MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (24.46ms, 17.8MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (24.59ms, 17.7MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (22.96ms, 19.1MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (112.46ms, 50.3MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (116.15ms, 52.2MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (118.42ms, 58.6MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (134.35ms, 58.7MB)
  • ์˜ค์™€... ์ด๋ ‡๊ฒŒ๋„ ํ‘ธ๋Š”๊ตฌ๋‚˜?
def solution(sequence):
    acc_list=[0]
    for idx in range(len(sequence)):
        if idx%2==0:
            acc_list.append(acc_list[-1]+sequence[idx])
        else:
            acc_list.append(acc_list[-1]-sequence[idx])
    return max(acc_list)-min(acc_list)
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.09ms, 10.3MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.19ms, 10.2MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (1.86ms, 10.3MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (3.71ms, 10.9MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (20.46ms, 17.8MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (20.96ms, 17.9MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (21.82ms, 17.8MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (26.54ms, 17.8MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (19.79ms, 19MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (107.60ms, 50.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (104.11ms, 52.3MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (112.87ms, 58.8MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (111.49ms, 58.8MB)
  • ๊ณ ์ˆ˜๋“ค์˜ ๊ธฐ์ƒ์ฒœ์™ธํ•œ ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด์„œ ๋„ˆ๋ฌด ์‹ ๊ธฐํ•ด์„œ ์‹œ๊ฐ„ ๊ฐ€๋Š” ์ค„ ๋ชจ๋ฅด๊ฒ ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•