백준 문제 링크: https://www.acmicpc.net/problem/15663
문제 요약
N개의 자연수 중에서 M개를 고른 수열
수열은 사전 순으로 증가하는 순서로 출력
중복되는 수열을 여러 번 출력하면 안됨
핵심 아이디어
백트래킹 문제이다. 마지막 번호를 저장해놓고 그거랑 일치하는지 중복체크를 하면 된다.
풀이
# silver2-15663. N과 M (9)
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
nums = list(map(int, input().split()))
# 마지막거랑 일치하는지만 중복 체크하면 됨
nums.sort()
array = []
def back():
if len(array) == m:
for i in array:
print(nums[i], end=' ')
print()
return
last_num = 0
for i in range(n): # 인덱스
if i not in array:
if nums[i] != last_num:
array.append(i)
last_num = nums[i]
back()
array.pop()
back()
실행 시간
메모리 31256KB, 시간 120ms (python3)
'ALGORITHM > 백준' 카테고리의 다른 글
[BOJ/PYTHON] 15665. N과 M (11), 15666. N과 M (12) (0) | 2023.07.27 |
---|---|
[BOJ/PYTHON] 15664. N과 M (10) (0) | 2023.07.27 |
[BOJ/PYTHON] 15657. N과 M (8) (0) | 2023.07.27 |
[BOJ/PYTHON] 15656. N과 M (7) (0) | 2023.07.27 |
[BOJ/PYTHON] 17136. 색종이 붙이기 (0) | 2023.07.27 |
댓글