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

Algorithm/Basic

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ž€? (Swift) (feat.DFS/BFS)

๊ฐ์ž ๐Ÿฅ” 2022. 5. 23. 22:03
๋ฐ˜์‘ํ˜•

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ž€?

๋ฐฑํŠธ๋ž˜ํ‚น์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ๊ณ ๋ คํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ผ์ข…์˜ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, DFS, BFS ๋กœ ๋ชจ๋‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น์€, ๋‹ต์ด ๋  ์ˆ˜ ์—†๋Š” ํ›„๋ณด๋Š” ๋”์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์‹œ ๋Œ์•„๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค๋ณด๋‹ค ๋” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์™„์ „ํƒ์ƒ‰์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์—๋Š” DFS๊ฐ€ ์žˆ๋‹ค. ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ์‹œ์ ์—์„œ ๊ณ„์†ํ•ด์„œ ๋ฐฉ๋ฌธํ• ๊ณณ์„ ํƒ์ƒ‰ํ•˜๊ณ , ๋ฐฉ๋ฌธํ•œ๋‹ค.

๋ฐ˜๋ฉด, ๋ฐฑํŠธ๋ž˜ํ‚น์€ ๋น„ํšจ์œจ์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ๋ชฉํ‘œ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๋Š” ๊ณณ๋งŒ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ข…์˜ ๊ฐ€์ง€์น˜๊ธฐ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. 

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ๋ฐฑํŠธ๋ž˜ํ‚น ์ ˆ์ฐจ

DFS ์ˆ˜ํ–‰ - ์œ ๋งํ•œ ๋…ธ๋“œ ๊ฒ€ํ†  - ์„œ๋ธŒํŠธ๋ฆฌ ์ด๋™ - ๋ฐฑํŠธ๋ž˜ํ‚น ์ˆ˜ํ–‰

1. DFS ์ˆ˜ํ–‰ : ์žฌ๊ท€๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ DFS๋ฅผ ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰
2. ์œ ๋งํ•œ ๋…ธ๋“œ ๊ฒ€ํ†  : ์œ ๋งํ•œ ๋…ธ๋“œ๋ฉด ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค.
3. ์„œ๋ธŒํŠธ๋ฆฌ ์ด๋™ : ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์‹œ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด DFS๋ฅผ ์ˆ˜ํ–‰
4. ๋ฐฑํŠธ๋ž˜ํ‚น ์ˆ˜ํ–‰ : ๋”์ด์ƒ ์œ ํšจํ•œ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐ๋˜์ง€ ์•Š์œผ๋ฉด ์ƒ์œ„ ๋…ธ๋“œ๋กœ ๋ฐฑํ•˜์—ฌ ๋ฐฑํŠธ๋ž˜ํ‚น ์ˆ˜ํ–‰

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ๋ฐฑํŠธ๋ž˜ํ‚น ๋Œ€ํ‘œ ์˜ˆ์ œ

์‚ฌ์‹ค ๋Œ€ํ‘œ ์˜ˆ์ œ๋Š” ๋ฐฑ์ค€์˜ N-Queen ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋‚œ ํ’€์ง€ ์•Š์•˜๊ธฐ์—, ๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.

https://didu-story.tistory.com/269

 

[๋ฐฑ์ค€] (Swift) 14889๋ฒˆ - ์Šคํƒ€ํŠธ์™€ ๋งํฌ (DFS-๋ฐฑํŠธ๋ž˜ํ‚น)

๋ฌธ์ œ๋งํฌ https://www.acmicpc.net/problem/14889 14889๋ฒˆ: ์Šคํƒ€ํŠธ์™€ ๋งํฌ ์˜ˆ์ œ 2์˜ ๊ฒฝ์šฐ์— (1, 3, 6), (2, 4, 5)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋˜๊ณ , ์˜ˆ์ œ 3์˜ ๊ฒฝ์šฐ์—๋Š” (1, 2, 4, 5), (3, 6, 7, 8)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค. www.a..

didu-story.tistory.com

 

๋ฌธ์ œ๋Š”, ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์„œ, ์ฃผ์–ด์ง„ n ์ด ์žˆ๋Š”๋ฐ, n/2 ๊นŠ์ด๊ฐ€ ๋˜๋ฉด dfs๋ฅผ ๋ฉˆ์ถฐ์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. (๋‚ด๊ฐ€ ํ•ด์„ํ•œ ๋ฐ”๋กœ๋Š” ์ด๋Ÿผ)

func dfs(depth: Int, start: Int) {
    // depth ๊ฐ€ ๋ฐ˜์ด๋๋‹ค๋Š” ๋œป์€ ์ด๋ฏธ ํ•œ ํŒ€ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ ๋๋‹ค๋Š” ๋œป
    // ๊ทธ๋ž˜์„œ depth = n/2 ๊ฐ€ ๋˜๋ฉด, ํŒ€๊ตฌ์„ฑ๋ชปํ•œ์• ๋“ค์„(false) team2์— ๋„ฃ์–ด์คŒ!!
    if depth == n/2 {
        team1 = 0
        team2 = 0
        for i in 0..<n{
            for j in 0..<n{
                if !visited[i] && !visited[j]{
                    team2 += s[i][j]
                }
                if visited[i] && visited[j] {
                    team1 += s[i][j]
                }
            }
        }
        // ๊ทธ๋ฆฌ๊ณ  ํŒ€๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋œ ์• ๋“ค์˜ ์ฐจ๋ฅผ ๊ตฌํ•ด์„œ min๊ฐ’์„ ๊ณ„์† ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ์ž
        minResult = min(minResult, abs(team1 - team2))
        return
    }
    for i in start..<n {
        if !visited[i] {
            visited[i] = true
            dfs(depth: depth + 1, start: i)
            visited[i] = false
        }
    }
}

์ด ์ฒ˜๋Ÿผ, func dfs ์•ˆ์— ์ดˆ๋ฐ˜์— if ๋ฌธ์œผ๋กœ depth ์˜ ๊ฐ’ ๋จผ์ € ํ™•์ธํ•œ๋‹ค. ๋งŒ์•ฝ if ์˜ ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, return ํ•˜๋ฉด์„œ dfs์˜ ํ•œ ํ„ด์„ ๋๋‚ด๊ฒŒ ๋œ๋‹ค.


์ด์ฒ˜๋Ÿผ ๋ฐฑํŠธ๋ž˜ํ‚น์€ ๋ฌด์–ธ๊ฐ€ ํŠน๋ณ„ํ•œ ๊ฐœ๋…์€ ์•„๋‹ˆ๊ณ , DFS/BFS ๋ฅผ ๊ตฌํ˜„ํ•  ์ค„ ์•ˆ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ์Šต๋“ ๊ฐ€๋Šฅํ•œ ๋‚ด์šฉ์ธ ๊ฒƒ ๊ฐ™๋‹ค. (๋‚œ ์ž˜ ๋ชปํ–ˆ์ง€๋งŒ  ใ… ใ… ใ… ) ์•ž์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋Š” ๊ผญ ๋งž์ถฐ์•ผ์ง•!

 

 

๐Ÿ“– Reference

https://velog.io/@mmindoong/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9BackTracking

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑํŠธ๋ž˜ํ‚น(BackTracking)

๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊ฐ™์ด ์ •๋ฆฌํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค-! ๐Ÿ’ก ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฑํŠธ๋ฆฌํ‚น์ด๋ž€ "๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ํƒ์ƒ‰ํ•œ๋‹ค"์˜ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฆ‰, ๋ฐฑํŠธ๋ž˜ํ‚น์€ ํ˜„์žฌ ์ƒํƒœ์—

velog.io

 

๋ฐ˜์‘ํ˜•