ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

 

๋ฌธ์ œ ํ’€์ด

 `DFS`๋ฅผ ํ†ตํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ NxN ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์—์„œ Queen์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์•ž์„œ ๋‹ค๋ฃฌ ๋ฐฑ์ค€: 9663 N-Queen๊ณผ ๋™์ผํ•œ ๋กœ์ง์œผ๋กœ ํ’€๋ฉด ๋œ๋‹ค. N์˜ ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€ 10์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์ค€์˜ ๋ฌธ์ œ์™€๋Š” ๋‹ฌ๋ฆฌ Python์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ๋‹ค์‹œ ํ•œ๋ฒˆ ๋กœ์ง์„ ์ƒ๊ธฐํ•ด๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ–‰์˜ ๊ฒฝ์šฐ DFS๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์ฆ๊ฐ€์‹œํ‚ค๋ฏ€๋กœ, ๋ณ„๋„์˜ ์ค‘๋ณตํ™•์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  • ์—ด์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์—ด์„ ์„ ํƒํ•˜๋ฉด `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. 
  • ์šฐ์ธก ์ƒ๋‹จ์—์„œ ์ขŒ์ธก ํ•˜๋‹จ์˜ ๋Œ€๊ฐ์„ ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ `X + Y`๋ฅผ `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ขŒ์ธก ์ƒ๋‹จ์—์„œ ์šฐ์ธก ํ•˜๋‹จ์˜ ๋Œ€๊ฐ์„ ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ `X - Y`๋ฅผ `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฑํŠธ๋ž™ํ‚น์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐ€์ง€๋ฅผ ๋ป—์€ ํ›„์— `set`์—์„œ ๋‹ค์‹œ `remove`ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

T = int(input())


def dfs(x):
    global answer

    if x == n:
        answer += 1
        return

    for y in range(n):
        if y in columns or x + y in l_diagonals or x - y in r_diagonals:
            continue
        columns.add(y)
        l_diagonals.add(x + y)
        r_diagonals.add(x - y)
        dfs(x + 1)
        columns.remove(y)
        l_diagonals.remove(x + y)
        r_diagonals.remove(x - y)


for test_case in range(1, T + 1):
    answer = 0
    n = int(input())
    columns, l_diagonals, r_diagonals = set(), set(), set()
    dfs(0)
    print('#' + str(test_case), answer)

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€