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

+ Recent posts