TIL - 프로그래밍/Python 알고리즘
[백준] 15654. N과 M (5) ~ (8) - Python
chaemj97
2022. 6. 21. 23:42
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
반응형