lst 라는 이차원 행렬에서 3개를 조합으로 뽑고 싶을 때
중복되는 경우 없이 뽑고 싶다면
row, col을 기억하면서 같은 row일 때는 해당 col보다 작은 값들은 보지 않도록 하면 된다.
(같은 row에서 해당 col보다 작은 값들은 이미 본 것이므로)
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
check = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
n, m = 3, 3
def combination(count, r, c):
global ret # 조합 갯수 세기
if count == 3:
print(selected)
ret += 1
return
for i in range(r, n):
if i == r: # 해당 row일 때는 col보다 작은 값은 보지 않기
c2 = c
else:
c2 = 0
for j in range(c2, m):
if check[i][j] == 0:
check[i][j] = 1
selected.append(lst[i][j])
combination(count+1, i, j)
check[i][j] = 0
selected.pop()
ret = 0
selected = []
combination(0, 0, 0)
print(ret)
'알고리즘 > 백트래킹' 카테고리의 다른 글
14888. 연산자 끼워넣기 (0) | 2019.11.28 |
---|---|
2580. 스도쿠 (0) | 2019.11.27 |
9663. N-Queen (0) | 2019.11.26 |
15650. N과 M (2) (0) | 2019.11.22 |
15649. N과 M(1) (0) | 2019.11.22 |