๐™๐™ก๐™ค๐™ฎ๐™™-๐™’๐™–๐™ง๐™จ๐™๐™–๐™ก๐™ก

uuuouuoยท2022๋…„ 7์›” 25์ผ
0
post-thumbnail

๐Ÿ“– ๋ชจ๋“  ์Œ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ


  • ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋นจ๋ฆฌ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ ์ฐพ๋Š” ๋ฌธ์ œ
  • ๊ฐ€์ค‘์น˜ ํฌํ•จ, ๋ฐฉํ–ฅ์„ฑ ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
  • ์ตœ์ ํ™” ๋ฌธ์ œ
    • ์ฃผ์–ด์ง„ ๋ฌธ์ œ์— ๋Œ€ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋งŽ์€ ํ•ด๋‹ต์ด ์กด์žฌํ•  ๋•Œ, ์ด ๊ฐ€์šด๋ฐ์—์„œ ๊ฐ€์žฅ ์ตœ์ ์ธ ํ•ด๋‹ต ์ฐพ์•„์•ผํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ’ฌ DP ์ ‘๊ทผ ๋ฐฉ๋ฒ•


  • ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra)์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
    • ์ด ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n^3)
  • Warshall์€ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ์Œ์˜ ๊ฒฝ๋กœ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ฐพ์•„๋‚ด๋Š” DP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ œ์•ˆ
  • Floyd๋Š” ์ด๋ฅผ ๋ณ€ํ˜•ํ•ด ๋ชจ๋“  ์Œ ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ์•ˆ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n^3)
    • ๋‹ค์ต์ŠคํŠธ๋ผ์™€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ™์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋žตํ•ด์ง
  • ์ธ์ ‘ ํ–‰๋ ฌ ์ด์šฉ
    • ์ดˆ๊ธฐ ์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฐ’์€ ์ž๊ธฐ ์ž์‹ ์—์„œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ(=0)๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ ๋ชจ๋‘ ๋งค์šฐ ํฐ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”

๐Ÿ’ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„


  • ์œ„ ๊ทธ๋ฆผ๊ณผ ๋ฌด๊ด€
int INF = Integer.MAX_VALUE;		
int[][] dist = {{0,7,INF,INF,3,10,INF}
				,{7,0,4,10,2,6,INF}
				,{INF,4,0,2,INF,INF,INF}
				,{INF,10,2,0,11,9,4}
				,{3,2,INF,11,0,INF,5}
				,{10,6,INF,9,INF,0,INF}
				,{INF,INF,INF,4,5,INF,0}};
	
// ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
// ๋…ธ๋“œ๋ฅผ 1๊ฐœ๋ถ€ํ„ฐ N๊ฐœ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ฒฝ์šฐ
for (int k = 0; k < 7; k++) {
	// k๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋…ธ๋“œ i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ.
	for (int i = 0; i < 7; i++) {
		for (int j = 0; j < 7; j++) {
			// k๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๋น„์šฉ์ด ๊ธฐ์กด ๋น„์šฉ๋ณด๋‹ค ๋” ์ž‘์€ ๊ฒฝ์šฐ ๊ฐฑ์‹ 
			// ๋˜๋Š” ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์–ด์žˆ๋˜ ๊ฒฝ์šฐ(INF) ์—ฐ๊ฒฐ ๋น„์šฉ ๊ฐฑ์‹ 
			dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
		}
	}
}

0๊ฐœ์˜ ๋Œ“๊ธ€