[실버 2] 백준 15666 - N과 M (12) (파이썬)
글 작성자: pental
https://www.acmicpc.net/problem/15666
풀이
- 자연수 N개 중에서 M개를 중복 선택 가능하게 고르되,
- 고른 수열은 비내림차순이어야 하고,
- 중복되는 수열은 한 번만 출력해야 합니다.
N, M = map(int, input().split())
nums = list(map(int, input().split()))
nums = sorted(list(set(nums)))
nums에서 중복 제거 후 정렬한다. 왜냐하면 중복 수열 출력을 방지하기 위해서이다.
def back(start, depth):
if depth == M:
print(' '.join(map(str, result)))
return
for i in range(start, len(nums)):
result.append(nums[i])
back(i, depth + 1)
result.pop()
백트래킹 함수는 depth가 M이 되면 수열을 완성하고, start부터 시작하는 이유는 비내림차순 조건 때문이다.
코드
# 백준 15666 - N과 M (12)
# 분류 : 백트래킹
N, M = map(int, input().split())
nums = list(map(int, input().split()))
nums = sorted(list(set(nums)))
result = []
def back(start, depth) :
if depth == M :
print(' '.join(map(str, result)))
return
for i in range(start, len(nums)) :
result.append(nums[i])
back(i, depth + 1)
result.pop()
back(0, 0)
'Programming > 백준' 카테고리의 다른 글
[실버 1] 백준 27970 - OX (파이썬) (0) | 2025.05.08 |
---|---|
[실버 1] 백준 1697 - 숨바꼭질 (파이썬) (0) | 2025.05.08 |
[실버 2] 백준 16953 - A → B (파이썬) (0) | 2025.05.07 |
[골드 1] 백준 2933 - 미네랄 (파이썬) (0) | 2025.05.07 |
[골드 5] 백준 1419 - 등차수열의 합 (파이썬) (0) | 2025.05.07 |
댓글
이 글 공유하기
다른 글
-
[실버 1] 백준 27970 - OX (파이썬)
[실버 1] 백준 27970 - OX (파이썬)
2025.05.08 -
[실버 1] 백준 1697 - 숨바꼭질 (파이썬)
[실버 1] 백준 1697 - 숨바꼭질 (파이썬)
2025.05.08 -
[실버 2] 백준 16953 - A → B (파이썬)
[실버 2] 백준 16953 - A → B (파이썬)
2025.05.07 -
[골드 1] 백준 2933 - 미네랄 (파이썬)
[골드 1] 백준 2933 - 미네랄 (파이썬)
2025.05.07