<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/1799
<ํ์ด ์ ๋ต>
1. ๋ฐฑํธ๋ํน์ผ๋ก ํธ๋ ๋ฌธ์ ์ง๋ง ๋จ์ํ๊ฒ ๊ตฌํํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํ ์์ด๋์ด๊ฐ ํ์ํ ๋ฌธ์ ์ ๋๋ค.
2. ๋๊ฐ์ ์ผ๋ก๋ง ์์ง์ด๋ ๋น์์ ํน์ง์ ๊ณ ๋ คํ ๋ ๊ฒ์์ ์นธ์ ๋์ธ ๋น์์ ๊ฒ์์ ์นธ์ผ๋ก๋ง ์์ง์ผ ์ ์๊ณ ํ์์ ์นธ์ ๋์ธ ๋น์์ ํ์์ ์นธ์ผ๋ก๋ง ์์ง์ผ ์ ์์ต๋๋ค.
3. ๋ฐ๋ผ์ ๊ฒ์์๊ณผ ํ์์ ๊ฐ๊ฐ์ ์นธ์ ๋ํด ๋น์์ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ๋ก ๊ตฌํด์ ๋ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ต์ ํ๋ฅผ ํ ์ ์์ต๋๋ค.
<์ ๋ต ์ฝ๋>
# 220927 1799 ๋น์
# ์ ๋ต์ฝ๋
# N: ์ฒด์คํ์ ํฌ๊ธฐ, chess: ์ฒด์คํ์ ์ด๊ธฐ ์ํ
N = int(input())
chess = [list(map(int, input().split())) for _ in range(N)]
# visited_diagonal 1, 2: ์ข -> ์ฐ, ์ฐ ->์ข ๋๊ฐ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ ๋ฐฐ์ด
visited_diagonal_1 = [0 for _ in range(2 * N)]
visited_diagonal_2 = [0 for _ in range(2 * N)]
# black, white: ๋น์์ ๋์ ์ ์๋ ์์น๋ฅผ ์ฒด์คํ ์๊น์ ๋ฐ๋ผ ๊ตฌ๋ถํ ์ขํ๋ฅผ ๋ด์ ๋ฐฐ์ด
black = []
white = []
for r in range(N):
for c in range(N):
if chess[r][c]:
if (r + c) % 2:
black.append((r, c))
else:
white.append((r, c))
# ๋ฐฑํธ๋ํน์ผ๋ก ๋น์ ๋์ ์ ์๋ ์์น ์๊น๋ณ๋ก ๊ณ์ฐ
def back_tracking(depth, cnt, candidates):
global result
# ํด๋น ์๊น ๋ด์ ๋ชจ๋ ๊ฐ๋ฅํ ์์น๋ฅผ ๋ค ๊ฒ์ฆํ์ ๊ฒฝ์ฐ ์ต๋๊ฐ ๊ฐฑ์ ํ ๋ฐํ
if depth == len(candidates):
result = max(result, cnt)
return
# r, c: ๋น์์ ๋์ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ ์์น์ ์ขํ
r, c = candidates[depth]
# ํด๋น ์์น์ ๋น์์ ๋์ ์ ์๋ ๊ฒฝ์ฐ
if visited_diagonal_1[r + c] == 0 and visited_diagonal_2[r - c + N] == 0:
# ๋๊ฐ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์
visited_diagonal_1[r + c] = 1
visited_diagonal_2[r - c + N] = 1
# ๋ค์ ์์น ์ฌ๊ท์ ์ผ๋ก ํ์ ์งํ
back_tracking(depth + 1, cnt + 1, candidates)
# ๋ฐฑํธ๋ํน
visited_diagonal_1[r + c] = 0
visited_diagonal_2[r - c + N] = 0
# ๋์ ์ ์๋ ๊ฒฝ์ฐ ๋์ง ์๊ณ ๋ค์ ์์น ํ์ ์งํ
back_tracking(depth + 1, cnt, candidates)
# result: ํด๋น ์์์ ๋น์์ ๋์ ์ ์๋ ๊ฐ์
# ํ๊ณผ ๋ฐฑ์ ๋ํด ๊ฐ๊ฐ ๊ตฌํด์ ์ ๋ต์ ๋ํด์ค๋ค.
result = 0
back_tracking(0, 0, black)
ans = result
result = 0
back_tracking(0, 0, white)
ans += result
# ์ ๋ต ์ถ๋ ฅ
print(ans)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 20165 ์ธ๋ด์ ๋๋ฏธ๋ ธ ์ฅ์ธ ํธ์ (Python/ํ์ด์ฌ) (0) | 2023.05.14 |
---|---|
[๋ฐฑ์ค] 1421 ๋๋ฌด๊พผ ์ด๋ค์ (Python/ํ์ด์ฌ) (2) | 2023.05.08 |
[๋ฐฑ์ค] 27942 :danceplant: (Python/ํ์ด์ฌ) (1) | 2023.04.12 |
[๋ฐฑ์ค] 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ1 (Python/ํ์ด์ฌ) (0) | 2023.04.04 |
[๋ฐฑ์ค] 2072 ์ค๋ชฉ (Python/ํ์ด์ฌ) (1) | 2022.12.28 |
๋๊ธ