์๋ ํ์ธ์ Foma๐ ์ ๋๋ค!
์ค๋์ ๊ทธ๋ํ ๋ฌธ์ ์์ ์์ฃผ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๋ ํ๋ก์ด๋ ์์ฌ์ด๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์!
ํ๋ก์ด๋ ์์ฌ์ด๋? ๐ค
์ํค ๋ฐฑ๊ณผ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋์ด์์ต๋๋ค.
"ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ์ ๊ฐ์ค์น๊ฐ ์์ด๊ฑฐ๋ ์์ธ (์์ ์ฌ์ดํด์ ์๋) ๊ฐ์ค ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก๋ค์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค."
์ฝ๊ฒ ๋งํ๋ฉด ๋ชจ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด์์.
๊ทธ๋ํ ์ค๋ช
์๋์ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๊ฒ์.
(ํ๋์ ๋๊ทธ๋ผ๋ฏธ๋ ์ ์ , ์ฌ์ด์ ์ซ์๋ ๊ฑฐ๋ฆฌ์ ๋๋ค.)
๋ง์ฝ 1๋ฒ ์ ์ ์์ 3๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ค๋ฉด ์ด๋ค ์ ์ ์ ์ด์ฉํด์ผ ๊ฐ์ฅ ์งง์๊น์?
์ ๋ต์ ์๊ธฐ ์ํด์ ์ค๊ฐ์ ๋ชจ๋ ์ ์ ์ ๊ฑฐ์ณ์ ๊ฐ ๋ค์ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ ๊ฒ ์ ๋๋ค.
1๋ฒ -> 2๋ฒ -> 3๋ฒ 32
1๋ฒ -> 5๋ฒ -> 3๋ฒ 11
์ด๋ฏ๋ก 1๋ฒ์์ 5๋ฒ์ ๊ฑฐ์ณ 3๋ฒ์ผ๋ก ๊ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฃ ?
๋ํ 2๋ฒ๊ณผ 3๋ฒ ๊ฐ์ด ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ๋๋ผ๋ 2๋ฒ์์ 4๋ฒ์ ๊ฑฐ์ณ 3๋ฒ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๊ฒ์ ์ ์ ์์ต๋๋ค.
(2๋ฒ -> 3๋ฒ 20 2๋ฒ -> 4๋ฒ -> 3๋ฒ 8)
์ด๋ฐ ์์ผ๋ก ํ๋ก์ด๋ ์์ฌ์ ์์ : 1...n ์ค๊ฐ: 1... n ๋์ฐฉ: 1...n ๊น์ง n์ 3์ ๊ณฑ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํฉ๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ๊ฐ์ ์ฐพ์๋์ผ๋ฉด ์ด๋ค ์ ์ ์ด๋ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์๊ฒ ์ฃ .
๋ค์๊ณผ ๊ฐ์ด 6๋ฒ์ฒ๋ผ ์ ๋๋ก ๊ฐ์ง ๋ชปํ๋ ์ ์ ์ ๋ํ ๊ฒ์ ๋ฌดํ๋๋ก ๊ฐ์ ์ง์ ํฉ๋๋ค.
์ฝ๋ ์ค๋ช
๋ช๊ฐ์ ์ ์ (n)์ด ์๋์ง์ ๋ชจ๋ ์ ์ ์ ์ฐ๊ฒฐ์ ๋ํ ๊ฑฐ๋ฆฌ(allConnections)๋ฅผ ์ ์ฅํด๋ก๋๋ค.
let n = 6
let allConnections = [[1,2,12],[2,3,20],[3,4,5],[4,5,7],[1,5,10],[2,4,3]]
๋ชจ๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ Int.max๋ก ์ด๋ค์ ธ์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ n+1 ์ ๊ณฑ๋งํผ ๋ง๋ค์ด์ค๋๋ค.( 1๋ฒ๋ถํฐ ์์ํ๋ฏ๋ก 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด)
var allDistances = Array(repeating: Array(repeating: Int.max, count: n+1), count: n+1)
์๊ธฐ ์์ ์ ๊ฑฐ๋ฆฌ๋ 0์ผ๋ก ์ธํ ํด์ค๋๋ค.
for i in 1...n {
allDistances[i][i] = 0
}
allConnections์ ์๋ ๋ชจ๋ ๊ฑฐ๋ฆฌ๋ค์ allDistances์ ๋ด์์ค๋๋ค.
func setConnection() {
for connection in allConnections {
allDistances[connection[0]][connection[1]] = connection[2]
allDistances[connection[1]][connection[0]] = connection[2]
}
}
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ํตํด j๊ฐ ์ง์ k๋ก ๊ฐ๋ ๊ฒ๊ณผ i๋ฅผ ๊ฑฐ์ณ k๋ก ๊ฐ๋ ๊ฒ์ ๋น๊ตํ์ฌ ๋ ์์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ค๋๋ค.
func floyd() {
for i in 1...n {
for j in 1...n {
for k in 1...n {
if allDistances[j][i] == Int.max || allDistances[i][k] == Int.max { continue }
if allDistances[j][i] + allDistances[i][k] < allDistances[j][k] {
allDistances[j][k] = allDistances[j][i] + allDistances[i][k]
}
}
}
}
}
์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ์ ์ ์ ๋ํ ๊ฐ์ฅ ๋น ๋ฅธ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
์ ์ฒด ์์ค ์ฝ๋
let n = 6
let allConnections = [[1,2,12],[2,3,20],[3,4,5],[4,5,7],[1,5,10],[2,4,3]]
var allDistances = Array(repeating: Array(repeating: Int.max, count: n+1), count: n+1)
func setConnection() {
for connection in allConnections {
allDistances[connection[0]][connection[1]] = connection[2]
allDistances[connection[1]][connection[0]] = connection[2]
}
}
func floyd() {
for i in 1...n {
for j in 1...n {
for k in 1...n {
if allDistances[j][i] == Int.max || allDistances[i][k] == Int.max { continue }
if allDistances[j][i] + allDistances[i][k] < allDistances[j][k] {
allDistances[j][k] = allDistances[j][i] + allDistances[i][k]
}
}
}
}
}
setConnection()
floyd()
print(allDistances)
๊ด๋ จ ๋ฌธ์
2021 KAKAO BLIND RECRUITMENT ํฉ์น ํ์ ์๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์์
๋๊ธ