링크 : https://www.acmicpc.net/problem/15666
15666번: N과 M (12)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
- 문제
- 소요시간: 11분 53초
- 설계하기(접근방법)
1. 입력받기
n,m 과 수열을 입력받는다
2. 구현하기
같은 숫자를 여러번 골라도 되니
set을 통해서 리스트의 중복 원소를 없애준다
그 후 list를 sort() 해주어 수열이 순차적으로
출력되도록 조정해준다
그 다음 dfs 백트래킹을 통해서
수열을 더해나가는데
문제의 조건인 비내림차순 수열이어야 하기 때문에
이전 원소보다 크도록 다음 원소를 정해준다
before = i 로 저장한 후
i 의 값을 dfs의 인자로 함께 넘겨주어 구현한다
3. 출력하기
ans를 출력한다
- 코드(출력)
n , m =map(int, input().split())
num_list = list(map(int, input().split()))
num_list = list(set(num_list))
num_list.sort()
ans = []
def dfs(cnt, lst, before):
if cnt == m:
ans.append(lst)
else:
for i in num_list:
if i >= before:
before = i
dfs(cnt + 1, lst + [i], before)
dfs(0, [], 0)
for i in ans:
print(*i)
- 얻어갈 부분
1. 이전 값을 dfs의 인자로 넘겨서 다음 원소의 크기를 조절해줄 수 있었다,
'알고리즘(백준) > 백트래킹' 카테고리의 다른 글
[알고리즘/순열, 백트래킹] 14888번 : 연산자 끼워넣기 - python (0) | 2024.02.11 |
---|---|
[알고리즘/백트래킹] 15686번 : 치킨 배달 - python (1) | 2024.02.07 |
[알고리즘/백트래킹] 15663번 : N과 M(9) - python (0) | 2024.02.06 |
[알고리즘/백트래킹] 15657번 : N과 M(8) - python (1) | 2024.02.06 |
[알고리즘/백트래킹] 15654번 : N과 M(5) - python (0) | 2024.02.06 |