본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[백준] 15654. N과 M (5) ~ (8) - Python

by chaemj97 2022. 6. 21.
728x90

https://www.acmicpc.net/problem/15654

 

15654번: N과 M (5)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net


  • 코드
from sys import stdin

# N개의 자연수 중 M개 고르기
N,M = map(int,stdin.readline().split())
num = list(map(int,stdin.readline().split()))

# 사전 순 출력을 위해
num.sort()

# 수열, 수열에 들어간 요소 표시
def check(arr,visited):
    # 수열의 길이가 M인가?
    if len(arr) == M:
        print(*arr)
        return

    # 수열에 들어간 요소표시를 위해 enumerate
    for i,n in enumerate(num):
        # 수열에 없다면
        if visited[i] == 0:
            # 수열에 넣기
            visited[i] = 1
            check(arr+[n],visited)
            # 초기화
            visited[i] = 0

check([],[0]*N)

 


https://www.acmicpc.net/problem/15655

 

15655번: N과 M (6)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net


  • 코드
from sys import stdin

# N개의 자연수 중 M개 오름차순으로 고르기
N,M = map(int,stdin.readline().split())
num = list(map(int,stdin.readline().split()))

# 오름차순 정렬
num.sort()

def check(idx,arr):
    # 수열의 길이가 M인가?
    if len(arr) == M:
        print(*arr)
        return
        
    for i in num[idx:]:
        check(num.index(i)+1,arr+[i])

check(0,[])

 


https://www.acmicpc.net/problem/15656

 

15656번: N과 M (7)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net


  • 코드
from sys import stdin

# N개의 자연수 중 M개 르기(중복 허용)
N,M = map(int,stdin.readline().split())
num = list(map(int,stdin.readline().split()))

# 오름차순 정렬
num.sort()

def check(arr):
    # 수열의 길이가 M인가?
    if len(arr) == M:
        print(*arr)
        return

    for i in num:
        check(arr+[i])

check([])

 


https://www.acmicpc.net/problem/15657

 

15657번: N과 M (8)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net


  • 코드
from sys import stdin

# N개의 자연수 중 M개 오름차순으로 고르기(중복 허용)
N,M = map(int,stdin.readline().split())
num = list(map(int,stdin.readline().split()))

# 오름차순 정렬
num.sort()

def check(idx,arr):
    # 수열의 길이가 M인가?
    if len(arr) == M:
        print(*arr)
        return
    
    for i in num[idx:]:
        check(num.index(i),arr+[i])

check(0,[])
728x90
반응형

댓글