์ž๋ฃŒ๊ตฌ์กฐ/๐Ÿ‘‰์•Œ๊ณ ๋ฆฌ์ฆ˜ - 29

์˜ค๋Š˜ ๋“ค์€ ๊ฐ•์˜ ๋ชฉ๋ก

  1. ๋ฐฑํŠธ๋ž˜ํ‚น - N queen(1)
  2. ๋ฐฑํŠธ๋ž˜ํ‚น - N queen(2)
  3. ๋ฐฑํŠธ๋ž˜ํ‚น - N queen(3)
  4. ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

N queen

๋Œ€ํ‘œ์ ์ธ ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ์ค‘ ํ•˜๋‚˜๋‹ค.
ํ•œ์ •๋œ ์ฒด์ŠคํŒ์— N๊ฐœ์˜ ํ€ธ์„ ์ตœ๋Œ€๋กœ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฌธ์ œ

  1. ์ด์ „ ํ€ธ๋“ค์ด ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๊ณต๊ฐ„์— ํ€ธ์„ ๋ฐฐ์น˜ํ•œ๋‹ค
  2. ๋ฐฐ์น˜ํ•˜๋˜ ๋„์ค‘์— ํ€ธ์„ ๋” ์ด์ƒ ๋†“์„ ์ˆ˜ ์—†๋‹ค๋ฉด,
    ๋” ์ด์ƒ ๋‹ค์Œ ํ–‰์œผ๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ ,
    ์ด์ „ ํ–‰์˜ ํ€ธ์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.

N queen ๊ตฌํ˜„

def dfs(N, curRow, curList, result):
    if N == curRow:
        result.append(curList[:])
        return
    for curCol in range(N):
        check = True
        for row in range(curRow):
            if curList[row] == curCol or curRow-row == abs(curList[row] - curCol):
                check = False
        if check:
            curList.append(curCol)
            dfs(N, curRow + 1, curList, result)
            curList.pop()

result = []
dfs(4, 0, [], result)
print(result)

๊ฒฐ๊ณผ

ํ•œ์ค„์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๊ฐ ํ–‰์— ํ€ธ์„ ๋†“๊ณ ,
๋‹ค์Œ ํ–‰์— ํ€ธ์„ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฆฌ์— ํ€ธ์„ ๋†“๊ณ ,
๋‹ค์Œ ํ–‰์˜ ํŠน์ • ์—ด์— ํ€ธ์„ ๋†“์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด ๊ฑด๋„ˆ๋›ฐ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ฐ€์ง€์น˜๊ธฐ

๊ฐ€์ง€์น˜๊ธฐ๋Š” ํŠน์ • ์—ด์— ํ€ธ์„ ๋†“์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ง„ํ–‰๋˜์—ˆ๋‹ค.
ํŠน์ • ์—ด์— ํ€ธ์„ ๋†“์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ž์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์—์„œ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

backtracking

์ด ๊ทธ๋ฆผ์—์„œ (1,0), (1,1), (1,2)๋Š” ํ€ธ์„ ๋†“์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—,
์ด ์œ„์น˜์— ํ€ธ์„ ๋†“๋Š” ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์—๋Š” ํ•ด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฑด๋„ˆ๋›ฐ์—ˆ๋‹ค.

์ด ์ฒ˜๋Ÿผ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ€ธ์„ ๋†“์•˜์„๋•Œ, ๊ฒฝ๋กœ๊ฐ€ ๊ฒน์น˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด์•ผํ•œ๋‹ค.
์ด๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ˆ˜์ง๊ณผ, ๋Œ€๊ฐ์„ ์ด ๊ฒน์น˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
(์ˆ˜ํ‰์€ ๋งค๋ฒˆ ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค๊ฐ€์„œ ๊ฒน์น˜์ง€ ์•Š์Œ)

์ˆ˜์ง์€ curList[row] == curCol
๋Œ€๊ฐ์„ ์€ curRow-row == abs(curList[row] - curCol)
์ด๋ ‡๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

์กฐ๊ฑด

์ž๋ฃŒ๊ตฌ์กฐ ์ •๋ฆฌ

๋ฐฐ์—ด, ํ, ์Šคํƒ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํ•ด์‰ฌํ…Œ์ด๋ธ”, ํŠธ๋ฆฌ, BST, ํž™

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž…, ๋ณ‘ํ•ฉ, ํ€ต (์ •๋ ฌ)
์žฌ๊ท€ ํ˜ธ์ถœ, ๋™์  ๊ณ„ํš๋ฒ•(DP), ๋ถ„ํ•  ์ •๋ณต, ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฐฑํŠธ๋ž˜ํ‚น
์ˆœ์ฐจ ํƒ์ƒ‰, ์ด์ง„ํƒ์ƒ‰
bfs, dfs, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํฌ๋ฃจ์Šค์นผ, ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (๊ทธ๋ž˜ํ”„)

๋งˆ์ง€๋ง‰

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒŒํŠธ์˜€๊ณ ,
๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์œ ํ˜•๋ณ„ ๋ฌธ์ œํ’€์ด ํŒŒํŠธ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ