ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
N * N์ ์ฒด์คํ์ด ์ฃผ์ด์ก์ ๋, ์๋ก ๊ณต๊ฒฉํ ์ ์๋๋ก ํธ์ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋จํ์ฌ ๋ฐฑํธ๋ํน์ ํ๋ฉด ๋๋ค.
- ๊ฐ์ ํ ๋๋ ์ด์ ๋ค๋ฅธ ํธ์ด ์กด์ฌํ๋๊ฐ?
- ํ์ ๊ฒฝ์ฐ DFS๋ฅผ ํตํด ์ฌ๊ทํธ์ถ์ ํ๊ฒ ๋๋ฉด ํ๋์ ํ์ ๋ํ ์ ํ์ ์งํํ๋ฏ๋ก ๋ณ๋๋ก ํ์ธํ ํ์๋ ์๋ค.
- ์ด์ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด, ์ฒซ๋ฒ์งธ ํธ์ ์๋ฆฌ๊ฐ (0, 0)์ด๋ผ๋ฉด ๊ฐ์ ์ด์ ์๋์ง ํ์ธํด ์ฃผ์ด์ผ ํ๋ค.
- ์ฐ์ธก ์๋จ์์ ์ข์ธก ํ๋จ(โ)์ ๋๊ฐ์ ์ ํธ์ด ์กด์ฌํ๋๊ฐ?
- ๋ฐฐ์น๋ ํธ์ X + Y๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์์ ์ ํํ ํธ์ X + Y์ ๊ฐ๋ค๋ฉด โ์ ์กด์ฌํ๋ ๊ฒ์ด๋ค.
- ์ข์ธก ์๋จ์์ ์ฐ์ธก ํ๋จ(โ)์ ๋๊ฐ์ ์ ํธ์ด ์กด์ฌํ๋๊ฐ?
- ๋ฐฐ์น๋ ํธ์ X - Y๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์์ ์ ํํ ํธ์ X - Y์ ๊ฐ๋ค๋ฉด โ์ ์กด์ฌํ๋ ๊ฒ์ด๋ค.
์ฝ๋
from sys import stdin
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)
if __name__ == '__main__':
answer = 0
n = int(stdin.readline())
columns, l_diagonals, r_diagonals = set(), set(), set()
dfs(0)
print(answer)
`l_diagonals`๋ `โ`๋ฅผ ์๋ฏธํ๋ฉฐ, `r_diagonals`๋ `โ`๋ฅผ ์๋ฏธํ๋ค. ๋๋ฆผ๋ณด ํ์ด์ฌ์ผ๋ก๋ ํต๊ณผํ ์ ์์ด PyPy3๋ฅผ ์ฌ์ฉํ์ฌ์ผ ์๊ฐ ์ด ๋ด์ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14502 ์ฐ๊ตฌ์ (0) | 2020.08.03 |
---|---|
๋ฐฑ์ค: 16948 ๋ฐ์ค ๋์ดํธ (0) | 2020.08.02 |
๋ฐฑ์ค: 14225 ๋ถ๋ถ์์ด์ ํฉ (0) | 2020.07.31 |
๋ฐฑ์ค: 2250 ํธ๋ฆฌ์ ๋์ด์ ๋๋น (0) | 2020.07.29 |
๋ฐฑ์ค: 1261 ์๊ณ ์คํ (0) | 2020.07.28 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ