[알각코] 백준 15650번 - N과 M (2)

백준 15650번

문제 자체는 전에 풀었던 백트래킹 문제와 거의 동일하다. 여기에 조건이 추가로 순서 상관없이 중복되는 값을 제외하는 것 빼고는!

N, M = map(int, input().split())
visited = [False] * N
tup = []


def recursive(start):
  if len(tup) == M:
    return print(' '.join(map(str, tup)))
  for i in range(start, n): # 요기 start를 range 첫 번째 인수로 넣어준다
    if not visited[i]:
      visited[i] = True
      tup.append(i+1)
      recursive(i+1)
      visited[i] = False
      tup.pop()

recursive(0)

그래서 recursive 함수 안에 for문을 돌 때, 전에 돌았던 값을 돌지 않기 위해 변수 하나를 추가해주었다.

start 변수를 추가해서 range 첫번째 값으로 받으면 해당 변수부터 돌게 된다

Screen Shot 2021-09-15 at 5 02 15 PM

이해가 안되면 외우자

Reference