[Algorithm] 수열 추측하기 (순열, 파스칼 응용)

myeonji·2022년 3월 1일
0

Algorithm

목록 보기
57/89

## 수열 추측하기(순열, 파스칼 응용)


def DFS(L, sum):
    if L == n and sum == f:
        for x in p:
            print(x, end=' ')
        sys.exit(0)
    else:
        for i in range(1, n+1):
            if ch[i] == 0:
                ch[i] = 1
                p[L] = i
                DFS(L+1, sum+(p[L]*b[L]))
                ch[i] = 0



n, f = map(int, input().split())
b = [1]*n
p = [0]*n
ch = [0]*(n+1)

for i in range(1, n):
    b[i] = (b[i-1]*(n-i))//i

DFS(0, 0)

b 리스트를 구하는 것이 관건이다.
조합(combination)을 응용하여 b 리스트를 만들어야 한다.

DFS 함수 내에서는 중복을 체크하기 위해 ch 리스트를 사용하여 현재 사용한 i 값에 1을 넣었다.
그리고 좀 헷갈린 부분.. p[L] 이여야 하는데 p[i]로 써서 틀렸었다.
만약 n=4 일 때, p = [?, ?, ?, ?] 이고 인덱스는 0, 1, 2, 3 이므로 i가 들어올 수 없다. i는 1, 2, 3, 4 로 for문을 돌리기 때문!
따라서 L을 넣야 한다.

0개의 댓글