728x90
https://www.acmicpc.net/problem/15649
- 생각
- 재귀로 달성하면 return
- 코드
from sys import stdin
N, M = map(int, stdin.readline().split())
# 수열, 수열에 들어간 요소 표시
def check(arr,visited):
# 수열의 길이가 M인가?
if len(arr) == M:
print(*arr)
return
for i in range(1,N+1):
# 수열에 없다면
if visited[i] == 0:
# 수열에 넣기
visited[i] = 1
check(arr+[i],visited)
# 초기화
visited[i] = 0
check([],[0]*(N+1))
https://www.acmicpc.net/problem/15650
- 코드
from sys import stdin
# 1부터 N까지 자연수 중 중복 없이 M개 오름차순으로 고르기
N,M = map(int,stdin.readline().split())
# 직전에 들어간 수+1, 수열, 수열에 들어간 요소 표시
def check(idx,arr,visited):
# 수열의 길이가 M인가?
if len(arr) == M:
print(*arr)
return
# 직전에 넣은 값보다 큰 값만 수열에 들어갈 수 있음
for i in range(idx,N+1):
# 수열에 없다면
if visited[i] == 0:
# 수열에 넣기
visited[i] = 1
check(i+1, arr+[i],visited)
# 초기화
visited[i] = 0
check(1,[],[0]*(N+1))
https://www.acmicpc.net/problem/15651
- 코드
from sys import stdin
# 1부터 N까지 자연수 중 M개 고르기(중복 허용)
N,M = map(int,stdin.readline().split())
# 수열
def check(arr):
# 수열의 길이가 M인가?
if len(arr) == M:
print(*arr)
return
# 직전에 넣은 값도 넣을 수 있음
for i in range(1,N+1):
check(arr+[i])
check([])
https://www.acmicpc.net/problem/15652
- 코드
from sys import stdin
# 1부터 N까지 자연수 중 M개 오름차순으로 고르기(중복 허용)
N,M = map(int,stdin.readline().split())
# 직전에 들어간 수, 수열
def check(idx,arr):
# 수열의 길이가 M인가?
if len(arr) == M:
print(*arr)
return
# 직전에 넣은 값보다 크거나 같은 값만 수열에 들어갈 수 있음
for i in range(idx,N+1):
check(i,arr+[i])
check(1,[])
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[백준] 1753. 최단 경로 - Python (0) | 2022.06.20 |
---|---|
[백준] 14502. 연구소 - Python (0) | 2022.06.19 |
[백준] 2805. 나무 자르기 - Python (0) | 2022.06.17 |
[프로그래머스] Lv.2 양궁대회 - Python (0) | 2022.06.16 |
[프로그래머스] Lv.2 주차 요금 계산 - Python (0) | 2022.06.16 |
댓글