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

[๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 9663 - N Queen

2022. 3. 29. 20:08
๋ชฉ์ฐจ
  1. ๋ฌธ์ œ
  2. ํ’€์ด ์–ธ์–ด
  3. ์ฝ”๋“œ
  4. ํ’€์ด ๋ฐฉ๋ฒ•
  5. ๊ฒฐ๊ณผ
  6. ์ฐธ๊ณ  ์ž๋ฃŒ

๋ฌธ์ œ

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

Kotlin

์ฝ”๋“œ

import java.util.*
import kotlin.math.abs

lateinit var array: Array<Int>
var n = 0
var cnt = 0

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

    nQueen(0)
    println(cnt)
}

fun nQueen(depth: Int) { // depth๋Š” row
    if (depth == n) {
        println(depth)
        cnt++
        return
    }

    for (i in 0 until n) { // i๋Š” col
        array[depth] = i

        if (check(depth)) {
            nQueen(depth + 1)
        }
    }
}

fun check(row: Int): Boolean {
    for (i in 0 until row) {
        // 1. ์ด์ „ ์—ด (์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’) ๊ณผ ๋น„๊ต, index ๊ฐ’์ด row ์ด๋ฏ€๋กœ ํ–‰์€ ๋ฌด์กฐ๊ฑด ๋‹ค๋ฆ„
        if (array[row] == array[i]) return false
        // 2. ๋Œ€๊ฐ์„  ๋น„๊ต
        else if (abs(array[row] - array[i]) == abs(row - i)) return false
    }
    return true
}

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

N-Queen

์šฐ์„  N-Queen ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

์ฒด์Šค์—์„œ Queen ์€ ์ƒ, ํ•˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„ ์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ Queen ์„ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ฒด์ŠคํŒ ์œ„์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ N-Queen ๋ฌธ์ œ์ด๋‹ค. Quuen ์„ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•˜๋‚˜์˜ Queen ์˜ ์ƒ, ํ•˜, ์ขŒ, ์šฐ ์—๋Š” ๋‹ค๋ฅธ Queen ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ•˜๋‚˜์˜ Queen ์˜ ๋Œ€๊ฐ์„ ์—๋Š” ๋‹ค๋ฅธ Queen ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์–ธ๋œป ๋ณด๋ฉด 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, 1์ฐจ์› ๋ฐฐ์—ด๋กœ๋„ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 1์ฐจ์› ๋ฐฐ์—ด์˜ index ๋ฅผ Row๋กœ, ํ•ด๋‹น ์›์†Œ๋ฅผ Col ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด 2์ฐจ์› ๋ฐฐ์—ด์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

1. ์šฐ์„  ์ฒซ๋ฒˆ์งธ ํ–‰ (์ฒด์ŠคํŒ์˜ ๋งจ ์œ„) ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

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

    nQueen(0)
    println(cnt)
}

 

2. array[0] = 0, ์ฆ‰ (row = 0, col = 0) ์— Queen ์„ ๋ฐฐ์น˜ํ•œ๋‹ค.

fun nQueen(depth: Int) { // depth๋Š” row
    if (depth == n) {
        cnt++
        return
    }

    for (i in 0 until n) { // i๋Š” col
        array[depth] = i

        if (check(depth)) {
            nQueen(depth + 1)
        }
    }
}

 

3. ์ด ๋•Œ, ํ•ด๋‹น ์œ„์น˜๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค. ์ƒ, ํ•˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„ ์„ ํŒ๋‹จํ•˜๋Š”๋ฐ ๋Œ€๊ฐ์„ ์„ ๊ฒ€์ฆํ•  ๋•Œ abs ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ข€ ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. abs(array[row] - array[i]) ๋Š” ๋‘ Queen ๊ฐ„์˜ col ์ฐจ์ด๋ฅผ ์˜๋ฏธํ•˜๊ณ , abs(row - i) ๋Š” ๋‘ Queen ๊ฐ„์˜ row ์ฐจ์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์„œ๋กœ ๋Œ€๊ฐ์„  ์ƒ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.

fun check(row: Int): Boolean {
    for (i in 0 until row) {
        // 1. ์ด์ „ ์—ด (์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’) ๊ณผ ๋น„๊ต, index ๊ฐ’์ด row ์ด๋ฏ€๋กœ ํ–‰์€ ๋ฌด์กฐ๊ฑด ๋‹ค๋ฆ„
        if (array[row] == array[i]) return false
        // 2. ๋Œ€๊ฐ์„  ๋น„๊ต
        else if (abs(array[row] - array[i]) == abs(row - i)) return false
    }
    return true
}

๊ฒฐ๊ณผ

์ฐธ๊ณ  ์ž๋ฃŒ

N-Queen Problem

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

'โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„ > 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 15649 ~ 15652 - N๊ณผ M (1 ~ 4)  (0) 2022.03.28
  1. ๋ฌธ์ œ
  2. ํ’€์ด ์–ธ์–ด
  3. ์ฝ”๋“œ
  4. ํ’€์ด ๋ฐฉ๋ฒ•
  5. ๊ฒฐ๊ณผ
  6. ์ฐธ๊ณ  ์ž๋ฃŒ
'โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/Back Tracking' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 1987 - ์•ŒํŒŒ๋ฒณ
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 14888 - ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 2580 - ์Šค๋„์ฟ 
  • [๋ฐฑํŠธ๋ž˜ํ‚น / Kotlin] BOJ 15649 ~ 15652 - N๊ณผ M (1 ~ 4)
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 9663 - N Queen
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

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

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

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

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

๋ชจ๋“  ์˜์—ญ

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

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