[baekjoon] 2580 ์ค๋์ฟ (python)
๋ฌธ์
9 x 9 2์ฐจ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ฉด ์ค๋์ฟ ๊ท์น์ ์๊ฑฐํด์ ๋น์นธ์ ์ซ์๋ฅผ ์ฑ์ฐ๋ฉด ๋๋ค.
์ ๊ทผ๋ฒ
๊ฐ๋ก, ์ธ๋ก, 9์นธ ๊ตฌ์ญ
์ ๊ฐ์ ์ซ์๊ฐ ์๋์ง ํ๋จํ๊ณ , ๋ฃ์ ์ ์๋ ์ซ์๋ฅผ ๋ฃ๊ณ ๋ค์ ๋น์นธ์ผ๋ก ๋์ด๊ฐ๋ค.
๋ค์ ๋น์นธ์์ ๋ถ๊ฐ๋ฅํ๋ฉด ์๋ ๋น์นธ์ผ๋ก ๋์ด์์ ๋ค๋ฅธ ์ซ์๋ฅผ ๋ฃ์ด๋ณธ๋ค (๋ฐฑํธ๋ํน)
pypy๋ก ํ๋ฉด ํต๊ณผํ๋๋ฐ python3๋ก ์ ์ถํ๋ฉด ๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
์ฒ์์ ๋น์นธ๋ค์ deque๋ก ๊ด๋ฆฌํด์ ๊ทธ๋ฅ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํด๋ณด๊ณ ,
1~9 ์ซ์๋ฅผ ๋ฃ์ ๋๋ง๋ค ์ค๋ณต์ฒดํฌ ํด์ฃผ๋ ๋ก์ง์ ๋ฐ๋ก ๋นผ์, ๊ฐ๋ฅํ ์ซ์๋ค๋ง ๊ฐ์ง๊ณ ํธ๋ํน์ ํด๋ด๋ ์๊ฐ์ด๊ณผ๋ค.
๋๋จธ์ง๋ ํ์ํ ๋ก์ง ๊ฐ์๋ฐ.. cpp๋ก ํ๋ฉด ๋๋ ค๋
์๊ฐ์ด๊ณผ๋ฅผ ์ก๋ ๊ฒ ๋ณด๋ค ๋ค๋ฅธ ๊ณต๋ถ๋ฅผ ํ๋๊ฒ ์์ฐ์ ์ผ ๊ฒ ๊ฐ์ ์ผ๋จ์ ๋์ด๊ฐ๋ค.
Code
# input
board = [list(map(int, input().split())) for _ in range(9)]
blank = [(i, j) for i in range(9) for j in range(9) if board[i][j] == 0]
def check_blank(idx):
if idx == len(blank):
# print
for i in range(9):
print(' '.join(map(str,board[i])))
exit()
i, j = blank[idx]
pi = (i // 3) * 3
pj = (j // 3) * 3
num_list = []
for num in range(1, 10):
pos = True
for k in range(9): # ๊ฐ๋ก, ์ธ๋ก, ์ ์ฌ๊ฐํ ๊ตฌ์ญ์ ํ๋๋ผ๋ ์ค๋ณต๋๋ฉด ๋ถ๊ฐ๋ฅ
if board[i][k] == num or board[k][j] == num or board[pi + k // 3][pj + k % 3] == num:
pos = False
break
if pos:
num_list.append(num)
for num in num_list:
board[i][j] = num
check_blank(idx + 1)
board[i][j] = 0
check_blank(0)
๊ฑด์ ํ ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค :D