https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
<코드>
N, M = map(int, input().split())
temp = []
result = []
def dfs():
if len(temp) == M:
tmp = sorted(''.join(map(str, temp)))
if tmp not in result:
result.append(tmp)
print(' '.join(tmp))
return
for num in range(1, N+1):
if num not in temp:
temp.append(num)
dfs()
temp.pop()
dfs()
<풀이방법>
백트래킹으로 푸는데 오름차순으로 정렬된 부분이 중복되면 안되므로 sorted로 정렬 후 result에 값을 추가하는데 만약에 이미 존재하면 그냥 return하고 존재하지 않으면 print 하였다.
'파이썬' 카테고리의 다른 글
[백준 파이썬] 15683번 감시 (0) | 2022.06.29 |
---|---|
[백준 파이썬] 14500 테트로미노 (0) | 2022.06.29 |
[백준 파이썬] 1504 특정한 최단 경로 (0) | 2022.06.22 |
[백준 파이썬] 14502번 연구소 (0) | 2022.06.20 |
[프로그래머스 파이썬] 주차 요금 계산 (0) | 2022.06.20 |