deo2kim
๋งž์™œํ‹€
deo2kim
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • ๊ฐœ๋ฐœ
    • Infra

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

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
deo2kim

๋งž์™œํ‹€

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - N-Queen
Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - N-Queen

2020. 9. 13. 08:15
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

Lv3 | ๋ฐฑํŠธ๋ž˜ํ‚น, DFS

 

๊ทœ์น™์€ ์ฒด์Šค๋ง์˜ ์ขŒ์šฐ, ์œ„์•„๋ž˜, ๋Œ€๊ฐ์„  ๋ชจ๋‘ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค!

3๋ฒˆ ์งธ ํ–‰์—์„œ ๋” ์ด์ƒ ๋ง์„ ๋‘˜ ์ˆ˜ ์—†๋‹ค.
4๋ฒˆ์งธ ํ–‰์—์„œ ๋” ์ด์ƒ ๋ง์„ ๋‘˜ ์ˆ˜ ์—†๋‹ค.
์„ฑ๊ณต!

ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ทœ์น™์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒดํฌํ•˜๋ฉด ํšจ์œจ์„ฑ ๋งˆ์ง€๋ง‰์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค!

  • ์œ„์•„๋ž˜ ๊ทœ์น™: visited ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์„ธ๋กœ(์—ด) ํ•œ์นธ์— ํ•˜๋‚˜์”ฉ๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ์ขŒ์šฐ ๊ทœ์น™: ํ•œ๋ฒˆ ๋ง์„ ๋†“์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋‹ค์Œ ํ–‰์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  • ๋Œ€๊ฐ์„  ๊ทœ์น™: ๋ง์„ ๋†“์„ ์ค€๋น„๋ฅผ ํ•˜๊ณ , ๊ทธ ์ž๋ฆฌ์˜ ์™ผ์ชฝ ์œ„๋Œ€๊ฐ์„ ๊ณผ, ์˜ค๋ฅธ์ชฝ ์œ„๋Œ€๊ฐ์„ ์— ๋ง์ด ์žˆ๋Š”์ง€ ์ฒดํฌ!

๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋ง์„ ๋‘˜ ์ˆ˜ ์žˆ์œผ๋ฉด ์„ฑ๊ณต!

 

๐Ÿ’จ

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def solution(n):
    answer = 0
    chess = [[0] * n for _ in range(n)]  # ์ฒด์ŠคํŒ
    visited = [0] * (n + 1)  # ์„ธ๋กœ์นธ ๋ฐฉ๋ฌธ ์ฒดํฌ

    # ์กฐ๊ฑด์— ์ผ์น˜ ํ•˜๋Š” ์ง€ ์ฒดํฌ | ์™ผ์ชฝ ๋Œ€๊ฐ์„ , ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„ 
    def check(x, y):
        ly, ry = y, y
        while x >= 0:
            x -= 1
            ly -= 1
            ry += 1
            if 0 <= ly:  # ์™ผ์ชฝ ๋Œ€๊ฐ์„ 
                if chess[x][ly]:
                    return False

            if ry < n:  # ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„ 
                if chess[x][ry]:
                    return False

        return True

    def bt(idx=0):
        nonlocal answer
        if idx == n:  # ์ฒด์Šค๋ฅผ ๋งˆ์ง€๋ง‰์นธ๊นŒ์ง€ ๋‘๋Š”๋ฐ ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ
            answer += 1
            return

        for i in range(n):
            if visited[i] == 0:  # ์„ธ๋กœ ์นธ์— ๋‘” ๋ง์ด ์—†๋Š” ๊ฒฝ์šฐ
                if check(idx, i):  # ๋Œ€๊ฐ์„ ๋ฐฉํ–ฅ ์ฒดํฌ
                    chess[idx][i] = 1  # ์ฒด์ŠคํŒ์— ๋ง์„ ๋‘๊ณ 
                    visited[i] = 1  # ์ด์ œ i ์นธ(์„ธ๋กœ ์ „์ฒด)๋Š” ๋ง์„ ๋ชป๋‘”๋‹ค.
                    bt(idx + 1)
                    chess[idx][i] = 0
                    visited[i] = 0

    bt()

    return answer

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

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

๋งํฌ: programmers.co.kr/learn/courses/30/lessons/12952?language=python3

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N-Queen

๊ฐ€๋กœ, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ๋œ ์ฒด์ŠคํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์ŠคํŒ ์œ„์˜ n๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ n์ด 4์ธ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ€ธ์„ ๋ฐฐ์น˜ํ•˜๋ฉด n๊ฐœ์˜ ํ€ธ์€

programmers.co.kr

 


๋ฌธ์ œ ์„ค๋ช…

๊ฐ€๋กœ, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ๋œ ์ฒด์ŠคํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์ŠคํŒ ์œ„์˜ n๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ n์ด 4์ธ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ€ธ์„ ๋ฐฐ์น˜ํ•˜๋ฉด n๊ฐœ์˜ ํ€ธ์€ ์„œ๋กœ๋ฅผ ํ•œ๋ฒˆ์— ๊ณต๊ฒฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

์ฒด์ŠคํŒ์˜ ๊ฐ€๋กœ ์„ธ๋กœ์˜ ์„ธ๋กœ์˜ ๊ธธ์ด n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, n๊ฐœ์˜ ํ€ธ์ด ์กฐ๊ฑด์— ๋งŒ์กฑ ํ•˜๋„๋ก ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ returnํ•˜๋Š” solutionํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ํ€ธ(Queen)์€ ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • n์€ 12์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

nresult

4 2

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€

'Algorithm Problem > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‹จ์–ด ํผ์ฆ(2017 ํŒ์Šคํƒ€์šด)  (0) 2020.09.14
[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ง•๊ฒ€๋‹ค๋ฆฌ  (4) 2020.09.13
[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋„๋‘‘์งˆ  (0) 2020.09.12
[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฌํ–‰๊ฒฝ๋กœ  (0) 2020.09.12
[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌด์ง€์˜ ๋จน๋ฐฉ ๋ผ์ด๋ธŒ(2019 KAKAO BLIND RECRUITMENT)  (0) 2020.09.11
    'Algorithm Problem/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‹จ์–ด ํผ์ฆ(2017 ํŒ์Šคํƒ€์šด)
    • [python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ง•๊ฒ€๋‹ค๋ฆฌ
    • [python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋„๋‘‘์งˆ
    • [python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฌํ–‰๊ฒฝ๋กœ
    deo2kim
    deo2kim
    ์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

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