Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (Swift) ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ (lv.3, ๊ทธ๋ฆฌ๋””, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๊ฐ์ž ๐Ÿฅ” 2023. 2. 8. 22:53
๋ฐ˜์‘ํ˜•

๐ŸŸ  ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42861

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐ŸŸ  ๋‚˜์˜ ํ’€์ด

์•„๋‹ˆ,, ์ „ํ˜€ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” bfs๋กœ ๋Œ๋ ค์„œ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ•˜๋ฉด์„œ ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ์•„๋‚ด๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทผ๋ฐ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ๋ง‰ํžŒ๊ฒŒ,,, "์‚ฌ์ดํด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•˜์ง€?"์˜€๋‹ค. ๋‹จ์ˆœํžˆ 1,2,3 ๋งŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด ์„ธ๊ฐœ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ [1,2] [2,3] [1.3] ๋จธ ์ด๋Ÿฐ์‹์œผ๋กœ ํ™•์ธํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€,, ๊ทผ๋ฐ ์ด๊ฒŒ ๋งŒ์•ฝ 8๊ฐœ ๊ทธ ์ด์ƒ์ด ์‚ฌ์ดํด์„ ๋Œ๊ฒŒ ๋˜๋ฉด? 1-2-3-4-5-6-7-8 ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”๋ฐ, ๋ฌธ์ œ์— ์˜ํ•˜๋ฉด 1๊ณผ 8์€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ์ด๋Ÿฐ๊ฒฝ์šฐ,,, ์–ด๋–ป๊ฒŒ  ์ € 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€??? ์—†๋‹ค!!!!!!!!!! ์•„์˜ค,, ๋ณต์žกํ•ด ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ธํ„ฐ๋„ท ์ฐฌ์Šค๋ฅผ ์ผ๋‹ค...

๊ฐ€๋”,, ๋‚ด ๋ธ”๋กœ๊ทธ์— ์™€์„œ ์•ˆ๋ถ€๋„ ๋‚จ๊ฒจ์ฃผ์…จ๊ณ , ๋‚˜๋„ ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋Š” formagran๋‹˜์˜ ๋ธ”๋กœ๊ทธ์— ์ •๋ง ๋๋‚ด์ฃผ๊ฒŒ ์„ค๋ช…์ด ๋˜์–ด์žˆ์—ˆ๋‹ค. ์ง„์งœ ๊ธ€ ํ•œ๋ฒˆ์ฝ๊ณ  ์ดํ•ด ์™„๋ฃŒ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

https://fomaios.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%84%AC-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-Swift

 

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

Problem ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr Solution ํ•ด๋‹น ๋ฌธ์ œ๋Š” Greedy ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํฌ๋ฃจ์Šค

fomaios.tistory.com

 

์ด ๊ธ€์„ ์ฐธ๊ณ ํ•ด์„œ ํ’€์ด๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ธธ,, ์•„๋‹ˆ ๊ทธ๋ƒฅ ์ €๊ธฐ ๋‚˜์™€์žˆ๋Š” ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ทธ ์ž์ฒด๊ฐ€, ์ด ๋ฌธ์ œ์˜ ๋‹ต์ด๊ธฐ๋„ ํ•˜๋‹ค!

์ฒ˜์Œ๋“ค์–ด๋ดค๋Š”๋ฐ, ,, ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด๋ณด์ž๋ฉด

 

๐Ÿ”– ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ตœ์†Œ ๋น„์šฉ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„ ๋…ธ์„ ๋“ค์„ ์œ„์ฃผ๋กœ ๋”ํ•ด๋‚˜๊ฐ€๋‹ค๊ฐ€ ์ˆœํ™˜ ์‚ฌ์ดํด (๋ฐ˜๋ณต) ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ๋…ธ์„ ์€ ๋น„์šฉ์—์„œ ์ œ์™ธํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ˆœํ™˜์ด๋ž€, ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋…ธ๋ž€์ƒ‰ ์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์„๋•Œ, ๊ทธ๋ž˜ํ”„๊ฐ€ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ๋ฅผ ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•ด์ค„๊นŒ? ์—ฌ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ถ€๋ชจ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ ค๋ณด๊ฒ ๋‹ค.

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ๋นจ๊ฐ„๊ธ€์”จ๋กœ ์ˆซ์ž๊ฐ€ ์จ์žˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ ์ƒ์„ฑํ•œ ๋ถ€๋ชจ์ด๋‹ค. ์ฃผํ™ฉ์ƒ‰ ์„ ์„ ์—ฐ๊ฒฐํ–ˆ์„ ๊ฒฝ์šฐ, 1๊ณผ 3์ค‘์— ๋” ์ž‘์€์ˆ˜ (์™ผ์ชฝ์— ์žˆ๋Š”์ˆ˜)๋ฅผ ๋ถ€๋ชจ๋กœ ์‚ผ๋Š”๋‹ค. ๊ทธ๋Ÿผ ๋…ธ๋“œ1์˜ ๋ถ€๋ชจ๋Š” 1, ๋…ธ๋“œ3์˜ ๋ถ€๋ชจ๋„ 1์ด ๋œ๋‹ค. 
์—ฐ๋‘์ƒ‰ ์„ ์„ ๋ณด์ž. ์ฒ˜์Œ์— ๋…ธ๋“œ4์™€ ๋…ธ๋“œ5๊ฐ€ ์—ฐ๊ฒฐ๋๋‹ค๊ณ  ์น˜์ž. ๊ทธ๋Ÿผ ๋” ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆ˜, 4๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿผ, ๋…ธ๋“œ4์™€ ๋…ธ๋“œ5์˜ ๋ถ€๋ชจ๋Š” ์ „๋ถ€ 4๊ฐ€ ๋œ๋‹ค.
์ด์ œ ๋…ธ๋“œ5์™€ ๋…ธ๋“œ6์„ ์—ฐ๊ฒฐํ•ด๋ณด์ž. ๋…ธ๋“œ5์™€ ๋…ธ๋“œ6์ค‘์— ๋…ธ๋“œ5๊ฐ€ ๋” ์™ผ์ชฝ์— ์žˆ๋‹ค. ๋…ธ๋“œ5์˜ ๋ถ€๋ชจ๋ฅผ ํ•จ๊ป˜ ๊ณต์œ ํ•ด์„œ ๋…ธ๋“œ6์—๊ฒŒ๋„ 4๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ, ๋” ์™ผ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ๋‚˜๊ฐ€๋„๋ก ์„ค๊ณ„ํ•ด์ค˜์•ผํ•œ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ๋ณด๋ผ์ƒ‰์ด ์—ฐ๊ฒฐ๋œ๋‹ค๋ฉด?

๋ณด๋ผ์ƒ‰์ด ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ๋ณด๋ฉด, ์—ฐ๊ฒฐ๋œ ๋‘ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋Š” ์ „๋ถ€ 4์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋งˆ์ฃผ์น˜๋Š” ๋‘ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ๊ฒฐ๊ตญ ์‚ฌ์ดํด์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค! ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๋ณด๋ผ์ƒ‰ ๋ถ€๋ถ„์€ ์—ฐ๊ฒฐ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์ˆœํ™˜์„ ์ฐพ์•„๋‚˜๊ฐ€๊ณ , ์ˆœํ™˜์ด ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆœ๊ฐ„! ๋น„์šฉ ์ถ”๊ฐ€์—์„œ ์ œ์™ธ์‹œ์ผœ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค!!  ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๋‹ค.

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

๐ŸŸ  ์ •๋‹ต์ฝ”๋“œ

import Foundation

func solution(_ n:Int, _ costs:[[Int]]) -> Int {
    let sortedCosts = costs.sorted{ $0[2] < $1[2] }
    var parentIdx = (0..<n).map{ $0 }
    var answer = 0

    for cost in sortedCosts {
        if !isCycle(parentArr: parentIdx, left: cost[0], right: cost[1]) {
            // ์‚ฌ์ดํด ํ˜•์„ฑ ์•ˆ๋˜๋ฉด, ๋ถ€๋ชจ ๋ฐ”๊ฟ”์ฃผ๊ณ 
            // ์ž‘์€ node ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์• ์˜ ๋ถ€๋ชจ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
            var newParent = 0
            var oldParent = 0

            if cost[0] > cost[1] {
                newParent = parentIdx[cost[1]]
                oldParent = parentIdx[cost[0]]
            } else {
                newParent = parentIdx[cost[0]]
                oldParent = parentIdx[cost[1]]
            }
            // left right ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ๋œ ์• ๋“ค๋„ ๋ชจ์กฐ๋ฆฌ ์ฐพ์•„์„œ ๋ฐ”๊ฟ”์ค˜์•ผํ•ด
            parentIdx.indices.filter{ parentIdx[$0] == oldParent }.forEach{ parentIdx[$0] = newParent }
            // ๋‹ค๋ฆฌ ๊ฑด์„ค ํ–‡์œผ๋‹ˆ๊นŒ cost ๋”ํ•ด์ฃผ๊ธฐ
            answer += cost[2]
        }
    }
    return answer
}

private func isCycle(parentArr: [Int], left: Int, right: Int) -> Bool {
    // ์–‘์ชฝ ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธ
    return parentArr[left] == parentArr[right] ? true : false
}

print(solution(4, [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]]))
๋ฐ˜์‘ํ˜•