[백준] 15650번(N과 M (2))

·2023년 7월 3일

백준 문제풀이

목록 보기
97/159

백준 15650번

처음 작성한 코드

m,n = map(int, input().split())
stack = []

def dfs(index):

  if len(stack) == n:
    print(*stack)
    return

  if index == m:
    return

  for i in range(index, m+1):

    if i not in stack:
      stack.append(i)
      dfs(i+1)
      stack.pop()

dfs(1)

◼ 순열을 만드는 코드에서 일부분만 수정하여 작성

  • 인덱스를 인수로 전달하여, 추가한 원소보다 나중에 오는 원소에 대해서만 검사하고 추가할 수 있도록 한다.
  • 이렇게 하면 오름차순으로 정렬된 조합만을 얻을 수 있음

.
◼ 그런데 오류 발생

  • 인덱스가 m의 범위를 초과하는 경우에 대해서는 함수를 종료하도록 조건문 작성
    ==가 아닌 >으로 작성했어야 함
  • 게다가 위의 경우는 어차피 for문으로 진입하지 못하고 저절로 종료되기 때문에 굳이 종료 조건을 검사할 필요 없음

최종 제출 코드

m,n = map(int, input().split())
stack = []

def dfs(index):

  if len(stack) == n:
    print(*stack)
    return

  for i in range(index, m+1):

    if i not in stack:
      stack.append(i)
      dfs(i+1)
      stack.pop()

dfs(1)

◼ 통과!

profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글