๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 2096 ๋‚ด๋ ค๊ฐ€๊ธฐ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 7. 4. 22:41

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

 

2096๋ฒˆ: ๋‚ด๋ ค๊ฐ€๊ธฐ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ˆซ์ž๊ฐ€ ์„ธ ๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž๋Š” 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋œ๋‹ค.

www.acmicpc.net

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ(4MB)์ด ์žˆ๋Š” dp๋ฌธ์ œ


์•„์ด๋””์–ด

1. ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ

  • ๋งค์šฐ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ๋ณด๊ณ  dp๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •
  • ๋‹จ์ˆœํžˆ ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ N๊ฐ’๋งŒ ๋ณด๊ณ  ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ธฐ์—” 4MB๋กœ๋Š” ํ„ฑ์—†์ด ๋ถ€์กฑํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ž„์‹œ๋กœ ์ €์žฅํ•ด์ฃผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ

 


์ฝ”๋“œ ์„ค๋ช…

max_arr = [int(x) for x in sys.stdin.readline().rstrip().split()]
min_arr = copy.copy(max_arr)

max_temp = copy.copy(max_arr)
min_temp = copy.copy(max_arr)

๋จผ์ € ์ดˆ๊ธฐ ์„ค์ •.

ํŒŒ์ด์ฌ์— ์žˆ๋Š” copy๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณต์‚ฌํ–ˆ๋‹ค.

์–•์€ ๋ณต์‚ฌ๋ฅผ ํ•ด๋„ ๊ดœ์ฐฎ์•„์„œ ๊ทธ๋ƒฅ copy ํ•จ.(๋ณ€์ˆ˜๊ฐ€ immutable ํ•˜๋‹ˆ๊นŒ)

 

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ œํ•œ์ด ์žˆ์–ด์„œ ์ž„์‹œ๋กœ ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ๋‹ด์•„์ค„ ์ˆ˜ ์žˆ๋Š” temp๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ ์–ธํ–ˆ๋‹ค.

๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋Š” 3์œผ๋กœ ๊ฐ ์นธ์—์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ์ž๋ฆฌ์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธํ•ด๊ฐ€๋ฉด ๋œ๋‹ค.

 

for _ in range(N - 1):
    b1, b2, b3 = map(int, sys.stdin.readline().rstrip().split())

    max_arr[0] = b1 + max(max_temp[0], max_temp[1])
    max_arr[1] = b2 + max(max_temp[0], max_temp[1], max_temp[2])
    max_arr[2] = b3 + max(max_temp[1], max_temp[2])

    min_arr[0] = b1 + min(min_temp[0], min_temp[1])
    min_arr[1] = b2 + min(min_temp[0], min_temp[1], min_temp[2])
    min_arr[2] = b3 + min(min_temp[1], min_temp[2])

    max_temp = copy.copy(max_arr)
    min_temp = copy.copy(min_arr)

์ด๋ฏธ ์ž…๋ ฅ์„ ํ•œ๋ฒˆ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— N - 1๋งŒํผ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

 

๋จผ์ € ๋ฌธ์ œ์— ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฒซ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์นธ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์„ ๊ฐ๊ฐ ๋น„๊ตํ•ด์„œ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

๋น„๊ตํ•˜๋ ค๋ฉด ์ด์ „ ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•˜๋ฏ€๋กœ temp๋ฆฌ์ŠคํŠธ์— ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.

 


์ „์ฒด ์ฝ”๋“œ

import sys, copy
N = int(input())

max_arr = [int(x) for x in sys.stdin.readline().rstrip().split()]
min_arr = copy.copy(max_arr)

max_temp = copy.copy(max_arr)
min_temp = copy.copy(max_arr)

for _ in range(N - 1):
    b1, b2, b3 = map(int, sys.stdin.readline().rstrip().split())

    max_arr[0] = b1 + max(max_temp[0], max_temp[1])
    max_arr[1] = b2 + max(max_temp[0], max_temp[1], max_temp[2])
    max_arr[2] = b3 + max(max_temp[1], max_temp[2])

    min_arr[0] = b1 + min(min_temp[0], min_temp[1])
    min_arr[1] = b2 + min(min_temp[0], min_temp[1], min_temp[2])
    min_arr[2] = b3 + min(min_temp[1], min_temp[2])

    max_temp = copy.copy(max_arr)
    min_temp = copy.copy(min_arr)

print(max(max_arr), min(min_arr))

copy๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์•ˆ ํ•˜๊ณ  min_arr = max_arr [:] ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณต์‚ฌํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.