문제 [15650]
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
- 고른 수열은 오름차순이어야 한다.
입력
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
- 예제 입력 1
3 1 - 예제 출력 1
1
2
3
- 예제 입력 1
4 2 - 예제 출력 1
1 2
1 3
1 4
2 3
2 4
3 4
- 예제 입력 1
4 4 - 예제 출력 1
1 2 3 4
문제 해석
앞에서 풀어보았던 문제와 비슷하나 이번에는 사용된 문자 그 다음부터를 출력해야 한다. 이전과 같은 초기값들을 설정해주고 시작하자. 초기값 설명은 이전에 리포팅한 15649문제에서 확인할 수 있다.
1
2
3
4
5
6
|
N,M = map(int,input().split())
List = []
for i in range(N):
List.append(i+1)
use_check = [True] * N
Answer= [0 for _ in range(M)]
|
cs |
그리고 이전과 같이 사용한 숫자를 append시키고, 출력이후에 pop을 시킨다. 차이점이 있으면 첫번째 값을 완전히 사용하고 난 이후에 그 값은 계속해서 False로 두어야 한다는 것이다. 그래서 i번째 값을 pop을 시킨 이후에 i 다음의 값들은 전부 True로 바꿔준다. 즉 아래와 같은 작업을 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def bubun(idx):
global use_check,Numbers
if idx==M:
print(*Numbers)
return
for i in range(idx,N):
if not use_check[i]:
continue
use_check[i] = False
Numbers.append(List[i])
bubun(idx+1)
Numbers.pop()
for j in range(i+1,N):
use_check[j] = True # i번째 값을 False로 위에서 바꾼 뒤 i+1부터는 다시 사용하기 위해 전부 True로 바꿔준다.
|
cs |
마지막으로 bubun함수를 출력해보자. bubun은 idx 값이 0부터 시작하기 위해서 bubun(0)으로 출력한다. 끝으로 코딩 작성한 것을 공개하고 마무리합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
N,M = map(int,input().split())
use_check = [True] * N
Numbers = []
List = []
for i in range(N):
List.append(i+1)
def bubun(idx):
global use_check,Numbers
if idx==M:
print(*Numbers)
return
for i in range(idx,N):
if not use_check[i]:
continue
use_check[i] = False
Numbers.append(List[i])
bubun(idx+1)
Numbers.pop()
for j in range(i+1,N):
use_check[j] = True
bubun(0)
|
cs |
출처
https://www.acmicpc.net/problem/15650
'백준 > N과 M' 카테고리의 다른 글
N과 M -(6) [문제번호 : 15655] (Python 파이썬 풀이) (0) | 2020.02.26 |
---|---|
N과 M -(5) [문제번호 : 15654] (Python 파이썬 풀이) (0) | 2020.02.26 |
N과 M -(4) [문제번호 : 15652] (Python 파이썬 풀이) (0) | 2020.02.25 |
N과 M -(3) [문제번호 : 15651] (Python 파이썬 풀이) (0) | 2020.02.25 |
N과 M -(1) [문제번호 : 15649] (Python 파이썬 풀이) (0) | 2020.02.25 |