본문 바로가기

Baekjoon

[Baekjoon]백준 15650 N과 M (2)(실버 3) - Python

문제설명
예제

문제를 살펴보면 이전에 푼 문제와 유사하지만, 중복되는 것을 제외하고 사전 순으로 증가하게 출력해야한다

이전에는 재귀적으로 함수를 호출할 때마다 숫자를 처음부터 확인하였다면,

이번에는 그 숫자를 증가시켜가면서 확인을 해야한다

def generate_sequences(num, length):
    result = []
    def backtrack(curr_seq, start):
        if len(curr_seq) == length:
            result.append(curr_seq.copy())
            return
        for i in range(start, num+1):
            if i not in curr_seq:
                curr_seq.append(i)
                backtrack(curr_seq, i+1)
                curr_seq.pop()

    backtrack([], 1)
    return result

num, length = map(int, input().split())
sequences = generate_sequences(num, length)
for res in sequences:
    print(*res)

이전 코드에서 backtrack의 인자로 curr_seq만 들어왔다면 이번에는 시작 기준점도 입력을 받도록 작성하였다

그렇게 하면 이전에 사용한 숫자는 다시 사용하지 않게 된다

예를 들어 설명하자면 2, 3과 같은 수열은 존재하지만, start인자로 인해

2보다 1이 더 작기 때문에 2, 1과 같은 수열은 만들어질 수 없다

오류 또는 추가적인 질문사항 있다면 댓글로 부탁드립니다!