Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스택의 특징
- 5397
- AVL 시간 복잡도
- 백준
- Stack 이란
- 원판 돌리기
- 백준 2447
- ㅣ풀이
- 백준 1406
- dfs
- 백준 17471
- c#
- heap
- 게리멘더링2
- 해시 구현
- 백준 17822
- 자료구조
- 조세퍼스 순열
- C/C++ 구현
- 별 찍기 10
- 백준 17779
- 백준 1158
- qorwns
- 해시구현
- 1764
- 버킷 정렬
- 구현
- 백준 5397
- 시간 복잡도
- 풀이
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 15649] N과M1 with 파이썬 본문
요구사항
중복을 허용하지 않고 n개중 m개를 뽑아서 출력하기
참고
다양한 문제 풀이법이 존재한다
1. 재귀를 통해 출력한다
-> 첫번째 부터 마지막 까지 방문하면서 정답 배열에 넣어준다
-> m만큼의 길이 만큼 왔으면 출력한다
2. permutation 모듈을 이용한다
-> n개 중 m개를 뽑는데 순서가 상관있게 뽑는 것은 순열이다
-> permutation 뽑은 후 출력한다
두 풀이 다 재밋으나 파이썬 스럽게 푸는 것은 2번째 풀이이다
풀이1
import sys
n,m = map(int,input().split())
visit =[0]*10
my_vec=[]
#dfs를 이용하여 n개중 m개(cnt) 뽑으면 출력한다
def Com(now, cnt):
if(cnt==m):
for i in my_vec:
print(i,end=' ')
print()
return
for i in range(1,n+1):
if(visit[i]==0):
visit[i]=1
my_vec.append(i)
Com(i,cnt+1)
my_vec.pop()
visit[i]=0
#첫 원소부터 dfs 시작
for i in range(1,n+1):
#방문 여부 표시
visit[i]=1
my_vec.append(i)
Com(i,1)
#종료
my_vec.pop()
visit[i]=0
풀이2
from itertools import permutations
n,m = map(int,input().split())
arr = list(range(1,n+1))
#permutation을 사용 arr중에서 m개 뽑기
k=list(permutations(arr,m))
#문자열로 변환 후 출력
for i in k:
print(' '.join(map(str,i)))
'파이썬' 카테고리의 다른 글
[백준 11047] 동전 0 with 파이썬 (0) | 2020.09.16 |
---|---|
[백준 15652] N과 M(4) with 파이썬 (0) | 2020.09.16 |
[백준 11650] 좌표 정렬하기 3 with 파이썬 (0) | 2020.09.16 |
[백준 10989] 수 정렬하기 3 with 파이썬 (0) | 2020.09.15 |
[백준 2751] 수 정렬하기 2 with 파이썬 (0) | 2020.09.15 |
Comments