백준 15649번 N과 M (1)

Hyun·2023년 2월 10일
0

코딩테스트

목록 보기
20/66


https://www.acmicpc.net/problem/15649
실패이유 : 구현실패

def fill(index, scope, length):
    if index == length:                     # 수열의 모든 개수를 만족하면 출력 후 종료
        print(' '.join(map(str, ans)))
        return

    for i in range(1, scope + 1):           # 수열의 모든 개수를 만족하지 않으면, scope 만큼 반복
        if check[i]:                            # 숫자를 한번도 고르지 않은 경우
            ans[index] = i
            check[i] = False                    # 숫자를 정답에 추가하고, 골랐음을 체크
            fill(index + 1, scope, length)          # 인덱스를 증가시켜 재귀함수 호출
            ans[index] = 0
            check[i] = True                     # 재귀가 끝났으면, 다시 새로운 조합을 고르기 위해 초기화


scope, length = map(int, input().split())

check = [True] * (scope + 1)        # 골랐는지 체크하는 배열
ans = [0] * length                  # 고른 숫자들

fill(0, scope, length)
  • 고른 수열을 담는 정답 배열 ans
  • 현재 숫자를 골랐는지 체크하는 배열 check
    • True 인 경우 고르지 않았음을 나타내고, False 인 경우 이미 골랐음을 의미
  • 인덱스를 증가시켜가며 재귀함수를 호출
    • 종료 조건은 인덱스가 수열의 최대 길이를 만족한 경우이다.

출처 : 코드플러스 - 알고리즘 기초 2/2 강의
https://code.plus/course/42

0개의 댓글

관련 채용 정보