๐Ÿค– 155

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Shortest Path Algorithm)

๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• - 'ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํŠน์ • ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ' - '๋ชจ๋“  ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ' - ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋Š” ๋ณดํ†ต ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„ ใ„ด ๊ฐ ์ง€์ ์€ ๊ทธ๋ž˜ํ”„์—์„œ '๋…ธ๋“œ'๋กœ ํ‘œํ˜„๋˜๊ณ , ใ„ด ์ง€์  ๊ฐ„ ์—ฐ๊ฒฐ๋œ ๋„๋กœ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ '๊ฐ„์„ '์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๊ทธ๋ž˜ํ”„์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ํŠน์ •ํ•œ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฐ๊ฐ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - '์Œ์˜ ๊ฐ„์„ '์ด ์—†์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ - ๋งค๋ฒˆ '๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ'๋ฅผ ์„ ํƒํ•ด์„œ ์ž„์˜์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„๋ฅ˜ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1) ์ถœ๋ฐœ ๋…ธ๋“œ ์„ค์ • 2) ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™” 3)..

๋ฐฑ์ค€ 12865: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ (Python)

https://www.acmicpc.net/problem/12865 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 ≤ W ≤ 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 ≤ V ≤ 1,000) www.acmicpc.net n, k = map(int, input().split()) d = [[0 for _ in range(k+1)] for _ in range(n)] for i in range(n): w, v = map(int, input().split()) for j in range(1, k+1): if j < w: d[i][j] = d[i-1][j]..

๋ฐฑ์ค€ 1912: ์—ฐ์†ํ•ฉ (Python)

https://www.acmicpc.net/problem/1912 1912๋ฒˆ: ์—ฐ์†ํ•ฉ ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” -1,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค. www.acmicpc.net n = int(input()) a = list(map(int, input().split())) d = [-1000] * n d[0] = a[0] for i in range(1, n): d[i] = max(d[i-1] + a[i], a[i]) print(max(d))

๋ฐฑ์ค€ 11053: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด (Python)

https://www.acmicpc.net/problem/11053 11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด ์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด www.acmicpc.net ์˜ˆ์ œ) n=6, A=[10, 20, 10, 30, 20, 50] -> ๊ธธ์ด 4 ์ฒ˜์Œ์— ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™” d=[1, 1, 1, 1, 1, 1] for๋ฌธ์„ ๋Œ๋ฉด์„œ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋” ํฌ๋ฉด ์ตœ๋Œ“๊ฐ’ +1 1. 10 20 10 30 20 50 1 1 1 1 1 1 2. 10 < 20 ์ด๋ฏ€๋กœ d[..

๋ฐฑ์ค€ 2156: ํฌ๋„์ฃผ ์‹œ์‹ (Python)

https://www.acmicpc.net/problem/2156 2156๋ฒˆ: ํฌ๋„์ฃผ ์‹œ์‹ ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹ํšŒ์— ๊ฐ”๋‹ค. ๊ทธ ๊ณณ์— ๊ฐ”๋”๋‹ˆ, ํ…Œ์ด๋ธ” ์œ„์— ๋‹ค์–‘ํ•œ ํฌ๋„์ฃผ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํฌ๋„์ฃผ ์ž”์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ์—ˆ๋‹ค. ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ทœ www.acmicpc.net n = int(input()) a = [0] for _ in range(n): a.append(int(input())) d = [0] * (n+1) d[1] = a[1] if n >= 2: d[2] = a[1] + a[2] for i in range(3, n+1): d[i] = max(d[i-1], d[i-2] + a[i], d[i-3] + a[i-1] + a[i]) print(d[n])

๋ฐฑ์ค€ 10844: ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜ (Python)

https://www.acmicpc.net/problem/10844 10844๋ฒˆ: ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜ ์ฒซ์งธ ์ค„์— ์ •๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. www.acmicpc.net n = int(input()) stair = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for _ in range(n+1)] stair[1] = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in range(2, n+1): for j in range(10): if j == 0: stair[i][0] = stair[i-1][1] elif j == 9: stair[i][9] = stair[i-1][8] else: stair[i][j] = stair[i-1][j-1] + stair[..

๋ฐฑ์ค€ 1463: 1๋กœ ๋งŒ๋“ค๊ธฐ (Python)

https://www.acmicpc.net/problem/1463 1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ ์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. www.acmicpc.net ์ฑ„์ ํ•˜๋Š”๋ฐ 2๋ถ„ ๊ฑธ๋ ค์„œ ์ข€ ์ซ„์•˜๋‹ค ใ…‹ ์ธ๋ฑ์Šค ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋ฐฐ์—ด์„ n์˜ ์ˆ˜๋งŒํผ ์„ค์ •ํ•ด์คŒ. n = int(input()) d = [0] * 1000001 d[2] = 1 d[3] = 1 for i in range(4, n+1): d[i] = d[i-1] + 1 if i % 3 == 0: d[i] = min(d[i//3] + 1, d[i]) if i % 2 == 0: d[i] = min(d[i//2] + 1, d[i]) print(d[n])

๋ฐฑ์ค€ 2579: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ (Python)

https://www.acmicpc.net/problem/2579 2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ฒŒ์ž„์€ ๊ณ„๋‹จ ์•„๋ž˜ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๊ณ„๋‹จ ๊ผญ๋Œ€๊ธฐ์— ์œ„์น˜ํ•œ ๋„์ฐฉ์ ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค. ๊ณผ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ๊ณ„๋‹จ์—๋Š” ์ผ์ •ํ•œ ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ๋Š”๋ฐ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด ๊ทธ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์  www.acmicpc.net ์–ด์ฐจํ”ผ ๋งˆ์ง€๋ง‰์นธ์€ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์นธ์„ ๋ฐŸ๋Š” ๊ฒฝ์šฐ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์‚ฐํ•ด์ค€๋‹ค ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค0์— 0์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค n = int(input()) arr = [0] for _ in range(n): arr.append(int(input())) d = [0] * (n+1) d[1] = arr[1] if n >= 2: d[2] = arr[1] + arr[2] for i in ra..

๋ฐฑ์ค€ 1932: ์ •์ˆ˜ ์‚ผ๊ฐํ˜• (Python)

https://www.acmicpc.net/problem/1932 1932๋ฒˆ: ์ •์ˆ˜ ์‚ผ๊ฐํ˜• ์ฒซ์งธ ์ค„์— ์‚ผ๊ฐํ˜•์˜ ํฌ๊ธฐ n(1 ≤ n ≤ 500)์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ •์ˆ˜ ์‚ผ๊ฐํ˜•์ด ์ฃผ์–ด์ง„๋‹ค. www.acmicpc.net ์‚ผ๊ฐํ˜•์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ๊ฑฐ๊พธ๋กœ for๋ฌธ์„ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค ํ˜„์žฌ๊ฐ’+์ตœ๋Œ“๊ฐ’ ํ•ด์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ด์ฃผ๊ณ  ์ œ์ผ ๋งˆ์ง€๋ง‰ ๊ณ„์‚ฐ ๋ถ€๋ถ„(์ฒซ๋ฒˆ์งธ ์ค„)์—๋Š” ๊ฐ’์ด ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋‹ˆ d[0][0] ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค! n = int(input()) d = [list(map(int, input().split())) for _ in range(n)] for i in range(n-2, -1, -1): for j in range(i+1): d[i][j] += max..

๋ฐฑ์ค€ 1149: RGB๊ฑฐ๋ฆฌ (Python)

https://www.acmicpc.net/problem/1149 1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ ์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ www.acmicpc.net n = int(input()) d =[list(map(int, input().split())) for _ in range(n)] for i in range(1, n): d[i][0] += min(d[i-1][1], d[i-1][2]) d[i][1] += min(d[i-1][0], d[i-1][2]) d[i][2] += min(d[i-1][0], d[i-1][1]) print(..