Algorithm/Python
[BOJ]15649. N과M(1),(2)
Pycoder
2019. 8. 2. 12:00
728x90
반응형
문제:
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
입력:
첫째 줄에 자연수 N과 M이 주어진다. (1<= M <= N < 8)
출력:
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
풀이 방법:
재귀적인 방법으로 길이가 M이 될 때까지 계속해서 넣어준다. 대신 이 문제에서는 중복을 허용하지 않았기 때문에 이에 대한 조건도 있어야 하고 증가하는 순서로 출력해야 하므로 배열에 들어있는 끝 값보다 클 때만 넣어줘야 한다는 조건 역시 필요하다. 이 문제에 대한 시리즈가 여러개 있는데 이에 맞는 조건을 넣어주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def sequence(stack,numbers,M): if len(stack)==M: print(*stack) return else: for number in numbers: if not number in stack: stack.append(number) sequence(stack,numbers,M) stack.pop() a,b=map(int,input().split()) numbers=list(range(1,a+1)) stack=[] for number in numbers: if not number in stack: stack.append(number) sequence(stack,numbers,b) stack.pop() | cs |
문제 링크:
728x90
반응형