알고리즘/DFS, BFS, 시뮬, 백트래킹

[백준] N과 M (1~4)

VIPeveloper 2021. 9. 19. 17:58
728x90
반응형

(1) 1~N까지 자연수 중, 중복 없이 M개를 고른 수열

- nPm 문제

n, m = map(int,input().split())

arr = []

def solution():
    if len(arr) == m:
        print(' '.join(map(str,arr)))
        return

    for i in range(1,n+1):
        if i not in arr:
            arr.append(i)
            solution()
            arr.pop()

solution()

(2) 1~N까지 자연수 중, 중복 없이 M개를 고른 수열 + 오름차순

- nCm 문제

n, m = map(int,input().split())

arr = []

def solution(start):
    if len(arr) == m:
        print(' '.join(map(str,arr)))
        return

    for i in range(start,n+1):
        if i not in arr:
            arr.append(i)
            solution(i+1)
            arr.pop()

solution(1)

(3) 1~N까지 자연수 중, 중복을 포함하여 M 개를 고른 수열

    - 같은 수를 여러번 골라도 된다.

    -mㅠn 문제

n,m = map(int,input().split())

arr = []
cnt = 0
def solution():
    global cnt
    if len(arr) == m:
        cnt += 1
        print(' '.join(map(str,arr)))
        return

    for i in range(1,n+1):
        arr.append(i)
        solution()
        arr.pop()

solution()
print(cnt)

(4) 1~N까지 자연수 중, 중복을 포함하여 M개를 고른 수열 + 오름차순

    - 먼문젠지 잘 모르겠음

n,m = map(int,input().split())

arr = []
cnt = 0
def solution(start):
    global cnt
    if len(arr) == m:
        cnt += 1
        print(' '.join(map(str,arr)))
        return

    for i in range(start,n+1):
        arr.append(i)
        solution(i)
        arr.pop()

solution(1)
print(cnt)
728x90
반응형