문제
풀이 (Python)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import sys n,m = map(int,input().split()) c = [False]*(n+1) a = [0]*m def go(index, start, n, m): if index == m: sys.stdout.write(' '.join(map(str,a))+'\n') for i in range(start, n+1): if c[i]: continue c[i] = True a[index] = i go(index+1, i+1, n, m) c[i] = False go(0,1,n,m) | cs |
1. 재귀 함수를 사용하여 수열을 만듦
2. 중복이 불가능 하기 때문에 check를 사용하여 True이면 사용 했음, False이면 사용하지 않음 여부 확인
3. start 인자를 사용하여 전달 인자로 i+1로 i 보다 큰 숫자를 전달해서 오름차순을 만들었다.
키워드 (Keyword)
키워드
재귀 함수 : 자신을 정의할 때 자기 자신을 재참조하는 방법
참고
https://ko.wikipedia.org/wiki/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98
재귀 함수 : 자신을 정의할 때 자기 자신을 재참조하는 방법
참고
https://ko.wikipedia.org/wiki/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98
문제 출처
'프로그래밍 > Baekjoon' 카테고리의 다른 글
(파이썬) 백준 알고리즘 10039번 평균 점수 (0) | 2019.01.10 |
---|---|
(파이썬) 백준 알고리즘 2178번 미로 탐색 (0) | 2019.01.09 |
(파이썬) 백준 알고리즘 15649 번 N과 M(1) (0) | 2019.01.09 |
(파이썬) 백준 알고리즘 2309번 일곱 난쟁이 (0) | 2019.01.09 |
(파이썬) 백준 알고리즘 2920번 (1) | 2018.12.05 |