728x90
문제는 더보기!
더보기
문제
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
- 고른 수열은 오름차순이어야 한다.
입력
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
예제 입력 1 복사
3 1
예제 출력 1 복사
1 2 3
예제 입력 2 복사
4 2
예제 출력 2 복사
1 2 1 3 1 4 2 3 2 4 3 4
예제 입력 3 복사
4 4
예제 출력 3 복사
1 2 3 4
전 글의 문제랑 동일한데, 값이 가면 갈수록 커지는 경우라고 생각하면 될 것 같다.
N,M = map(int,input().split())
lst = []
def f():
if len(lst) == M:
print(' '.join(map(str,lst)))
return
for i in range(1, N + 1):
if len(lst) == 0 or i > lst[-1] :
lst.append(i)
f()
lst.pop()
f()
원래 i not in lst이었던 부분을 수정했다. max를 써도 괜찮지만, max또한 lst를 한바퀴씩 돌기때문에 어차피 큰 값이 쌓이도록 하는 것이기 때문에 lst[-1]보다 크면 값이 추가되게 수정하였다.
그리고 처음실행할때 lst가 비어있기 때문에 or연산자를 통해 비어있을경우 바로 if문 안쪽이 진행되게 하였다.
참고로 연산자안에서 or연산같은 경우, 앞의 조건식이 True이면 뒤에 조건식을 실행하지 않아 비어있음에도 오류가 나지 않는다!!
728x90
'Python > 백준' 카테고리의 다른 글
9663_N-Queen (0) | 2021.12.14 |
---|---|
15652_N과M_4 (0) | 2021.12.13 |
15649_N과M(1) (0) | 2021.12.09 |
18870_좌표 압축 (0) | 2021.12.08 |
10814_나이순 정렬 (0) | 2021.12.07 |