알고리즘/백준

15665번: N과 M(11)

happenundo 2024. 4. 9. 15:51
728x90
 

15665번: N과 M (11)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

이전 문제에서 다른 점은 중복이 허용된다는 점이다.

여기서의 중복은 수열의 중복이 아니라, 같은 인덱스의 수가 들어갈 수 있다는 것이다.

 


# 15665번: N과 M (11)

n, m = map(int, input().split())
arr = sorted(list(map(int, input().split())))

result = []

def backTracking(depth):
    if depth == m:
        print(*result)
        return
    
    remember = 0
    for i in range(n):
        if arr[i] != remember:
            remember = arr[i]
            result.append(arr[i])
            backTracking(depth + 1)
            result.pop()

backTracking(0)

 

 

visited 리스트를 사용해 같은 인덱스의 수가 들어갈 수 있도록 하던 로직을 없애주면 된다.

그리고 backTracking함수의 인자는 depth를 넣어줘서 depth가 m과 같아질 경우 정답을 출력하고 해당 backTracking문을 빠져나온다.

파라미터 없이, result의 길이가 m과 같은 경우 정답을 출력하는 식으로 코드를 바꿀 수도 있다.

728x90