โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/Back Tracking

[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 14889 - ์Šคํƒ€ํŠธ์™€ ๋งํฌ

2022. 4. 10. 12:21
๋ชฉ์ฐจ
  1. ๋ฌธ์ œ
  2. ํ’€์ด ์–ธ์–ด
  3. ์ฝ”๋“œ
  4. ํ’€์ด ๋ฐฉ๋ฒ•
  5. ๊ฒฐ๊ณผ

๋ฌธ์ œ

ํ’€์ด ์–ธ์–ด

Kotlin

์ฝ”๋“œ

import java.lang.Integer.min
import java.util.*
import kotlin.math.abs
import kotlin.system.exitProcess

lateinit var board: Array<Array<Int>>
lateinit var visited: Array<Int>
var min_value = Int.MAX_VALUE
var n = 0

fun main() = with(Scanner(System.`in`)) {
    n = nextInt()
    board = Array(n) { Array(n) { nextInt() } }
    visited = Array(n) { 0 }

    search(0, 0)
    println(min_value)
}

fun search(index: Int, depth: Int) {
    if (depth == n / 2) {
        calculate()
        return
    }

    for (i in index until n) {
        if (visited[i] == 0) {
            visited[i] = 1
            search(i + 1, depth + 1)
            visited[i] = 0
        }
    }
}

fun calculate() {
    var start = 0
    var link = 0

    for (i in 0 until n - 1) {
        for (j in i until n) {
            if (visited[i] == 1 && visited[j] == 1) {
                start += board[i][j]
                start += board[j][i]
            } else if (visited[i] == 0 && visited[j] == 0) {
                link += board[i][j]
                link += board[j][i]
            }
        }
    }

    val score = abs(start - link)

    if (score == 0) {
        println(score)
        exitProcess(0)
    }

    min_value = min(score, min_value)
}

ํ’€์ด ๋ฐฉ๋ฒ•

๊ฐœ์ธ์ ์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ์ง€๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•ด์„œ ์•ž์„œ ์ž‘์„ฑํ•œ ๊ณจ๋“œ ๋ฌธ์ œ๋ณด๋‹ค ์–ด๋ ค์› ๋‹ค. ์šฐ์„  2๊ฐœ์˜ ํŒ€ (์Šคํƒ€ํŠธํŒ€, ๋งํฌํŒ€) ์œผ๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•œ๋‹ค. ๋ฐฉ๋ฌธ ์ง€์ ์„ ์Šคํƒ€ํŠธํŒ€ ์œผ๋กœ ๋‘๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ์ง€์ ์„ ๋งํฌํŒ€ ์œผ๋กœ ๋‘๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

1. 2๊ฐœ์˜ ํŒ€์œผ๋กœ ๋‚˜๋ˆ„๋ฏ€๋กœ depth == n / 2 ์ธ ๊ฒฝ์šฐ์— ์ ์ˆ˜ ๊ณ„์‚ฐ

fun search(index: Int, depth: Int) {
    if (depth == n / 2) {
        calculate()
        return
    }

    for (i in index until n) {
        if (visited[i] == 0) {
            visited[i] = 1
            search(i + 1, depth + 1)
            visited[i] = 0
        }
    }
}

 

2. ๋ฐฉ๋ฌธํ•œ ์ง€์ ์„ ์Šคํƒ€ํŠธํŒ€์œผ๋กœ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์„ ๋งํฌํŒ€์œผ๋กœ ๋‘๊ณ  ์ ์ˆ˜ ๊ณ„์‚ฐ

    for (i in 0 until n - 1) {
        for (j in i until n) {
            if (visited[i] == 1 && visited[j] == 1) {
                start += board[i][j]
                start += board[j][i]
            } else if (visited[i] == 0 && visited[j] == 0) {
                link += board[i][j]
                link += board[j][i]
            }
        }
    }

    val score = abs(start - link)
    min_value = min(score, min_value)

 

3. ์ ์ˆ˜์˜ ์ฐจ์ด๊ฐ€ 0์ด๋ฉด ์ตœ์†Œ๊ฐ’์ด๋ฏ€๋กœ DFS๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒ

    if (score == 0) {
        println(score)
        exitProcess(0)
    }

๊ฒฐ๊ณผ

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„ > Back Tracking' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 1759 - ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ  (0) 2022.04.10
[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 1987 - ์•ŒํŒŒ๋ฒณ  (0) 2022.04.10
[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 14888 - ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ  (0) 2022.03.31
[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 2580 - ์Šค๋„์ฟ   (0) 2022.03.30
[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 9663 - N Queen  (0) 2022.03.29
  1. ๋ฌธ์ œ
  2. ํ’€์ด ์–ธ์–ด
  3. ์ฝ”๋“œ
  4. ํ’€์ด ๋ฐฉ๋ฒ•
  5. ๊ฒฐ๊ณผ
'โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/Back Tracking' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 1759 - ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 1987 - ์•ŒํŒŒ๋ฒณ
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 14888 - ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 2580 - ์Šค๋„์ฟ 
kodo_o
kodo_o
iOS ๊ฟ€์žผ!
kodo_o
๐ŸŽ๐Ÿ
kodo_o
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (149)
    • ๐Ÿ”จ ํ”„๋กœ์ ํŠธ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • ๐Ÿ’ป ๊ฐœ๋ฐœ (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • ์˜ค๋Š˜์˜ ์‚ฝ์งˆ (7)
      • ์—๋Ÿฌ์™€์˜ ๋™์นจ (1)
    • โœ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • ๐Ÿ“š CS (6)
      • Operating System (6)
    • โ›น๏ธ ๋ผ์ดํ”„ (30)
      • 2020 ๊ฒจ์šธ๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (12)
      • 2021 ์—ฌ๋ฆ„๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (6)
      • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (1)
      • ํšŒ๊ณ  (10)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๊นƒํ—ˆ๋ธŒ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
kodo_o
[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 14889 - ์Šคํƒ€ํŠธ์™€ ๋งํฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.