알고리즘 공부 ⌨/백준
[백준 15649] N과 M (1) Python3
고짬이
2021. 9. 7. 00:20
문제 주소 및 출처 ❕
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
문제 : 15649 N과 M (1)
언어 : Python3
풀이 방법 1. Python 내장함수 itertools의 순열 이용
풀이 방법 2. 백트래킹 이용
💬 나의 코드
📌 Python3 👉 itertools 이용
import itertools
N, M = map(int, input().split())
arr = [x for x in range(1, N+1)]
v = itertools.permutations(arr, M)
for w in v:
sub_a = ""
for i in range(M):
sub_a += str(w[i]) + " "
print(sub_a)
📌 Python3 👉 백트래킹 이용
N, M = map(int, input().split())
visited = [0]*N
ans = []
def seq():
if len(ans) == M:
answer = ""
for x in ans:
answer += str(x) + " "
print(answer)
return
for i in range(N):
if visited[i] == 0:
visited[i] = 1
ans.append(i+1)
seq()
visited[i] = 0
ans.pop(-1)
seq()
풀고 나서 보니, visited 없어도 될 듯!
if visited[i] == 0 대신에 if i+1 not in ans 도 괜찮을 것 같다,,