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

[๋ฐฑ์ค€] 28017 ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•˜์ž (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2023. 7. 1. 03:11

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

 

28017๋ฒˆ: ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•˜์ž

์ฒซ์งธ ์ค„์— ์‚ฐ์ง€๋‹ˆ๊ฐ€ ๊ฒŒ์ž„์„ ๋ช‡ ํšŒ์ฐจ๋ฅผ ํ•˜๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ $N$๊ณผ ๋ฌด๊ธฐ์˜ ์ข…๋ฅ˜ $M$์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. $(2 \le N, M \le 500)$ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ $N$๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋ฌด๊ธฐ๋งˆ๋‹ค ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•˜๋Š”๋ฐ

www.acmicpc.net


๋Œ€ํšŒ ์ดˆ๋ฐ˜์— ์‚ฝ์ง‘ํ•˜๋‹ค๊ฐ€ DP์ธ๊ฑธ ๊นจ๋‹ซ๊ณ  ํ•ด๊ฒฐํ–ˆ๋‹ค. pypy๋กœ ์ œ์ถœ, ์ดํ›„ python์œผ๋กœ ๋‹ค์‹œ ์ œ์ถœ.


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

1. ๋ฐ˜๋ณต๋ฌธ

  • ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค ์‹คํŒจํ–ˆ๋‹ค. 

2. DP

  • nํšŒ์ฐจ์˜ ๊ฐ ๋ฌด๊ธฐ๋งˆ๋‹ค ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

  • ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ด์ „ ํ–‰์— ์žˆ๋Š” ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋‹ค์Œ ํ–‰์— ๋”ํ•ด๊ฐ€๋ฉฐ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋œ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ๋งˆ์ง€๋ง‰ ํ–‰์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์ „์ฒด ์ฝ”๋“œ - pypy๋กœ ์ œ์ถœ

import sys

INF = int(1e9)
N, M = map(int, input().split())
arr = []

for _ in range(N):
    arr.append([int(x) for x in sys.stdin.readline().split()])

for i in range(N - 1):

    for j in range(M):

        temp = INF

        for k in range(M):
            if arr[i][k] <= temp and j != k:
                temp = arr[i][k]

        arr[i + 1][j] += temp

print(min(arr[N - 1]))

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

for i in range(N - 1):

    for j in range(M):

        temp = INF

        for k in range(M):
            if arr[i][k] <= temp and j != k:
                temp = arr[i][k]

        arr[i + 1][j] += temp

์œ„ ์„ค๋ช…ํ•œ ๋ถ€๋ถ„์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

for๋ฌธ์— 3๊ฐœ๋ผ python์œผ๋กœ ์ œ์ถœ ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด pypy๋กœ ์ œ์ถœํ–ˆ๋‹ค.


์ถ”๊ฐ€) ์ „์ฒด ์ฝ”๋“œ - python3๋กœ ์ œ์ถœ

import sys

N, M = map(int, input().split())
arr = []

for _ in range(N):
    arr.append([int(x) for x in sys.stdin.readline().split()])

for i in range(N - 1):

    for j in range(M):

        temp = min(arr[i][:j] + arr[i][j + 1:])

        arr[i + 1][j] += temp

print(min(arr[N - 1]))

 

ํŒŒ์ด์ฌ์˜ slicing ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

python3๋กœ ์ œ์ถœํ•˜๋‹ˆ ํ†ต๊ณผํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  arr์—์„œ ์ด์ „ํ–‰์˜ ์ •๋ณด๋Š” ํ•„์š” ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด ํฌ๊ธฐ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.