티스토리 뷰
반응형
6.2 재귀 호출과 완전 탐색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 6.2 재귀 호출과 완전 탐색
# 조건 : n>=1
# 1부터 n까지의 합을 반환
def sum(n) :
ret = 0
for i in range(1, n):
ret += i
return ret
# 재귀를 사용
def recursiveSum(n):
# 기저조건을 생성
if n == 1 : return 1
return n + recursive(n-1)
|
cs |
- 코드 6.2 n개의 원소 중 m개를 고르는 모든 조합을 찾는 알고리즘
책에 있는 C++ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void pick(int n, vector<int> &picked, int topick) {
if(topick == 0) {
for (int i = 0; i < picked.size(); ++i) {
cout << picked[i] << " ";
}
cout << endl;
return;
}
int smallest = picked.empty() ? 0 : picked.back() + 1;
for (int j = smallest; j < n; ++j) {
picked.push_back(j);
pick(n, picked, topick-1);
picked.pop_back();
}
}
|
cs |
Python으로 새로 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# n개의 원소 중 m개를 고르는 모든 조합을 찾는 알고리즘
# n : 전체 원소의 수
# picked : 지금까지 고른 원소들의 번호
# toPick : 더 고를 원소의 수
def pick(n, picked, toPick):
# 기저 조건 : 더 고를 원소가 없을 때(이미 고를 개수를 다 고른 상황) 고른 원소들을 출력
if toPick == 0 :
print(picked)
return
# n개의 원소 중 선택된 것이 없다면 smallest에 0을 넣고, 선택된 것이 있다면 선택된 것 중 마지막 인덱스에 1을 더한다. 즉 채운 것 뒤부터 보겠다는 뜻
smallest = 0 if not picked else len(picked)
# 뽑아야 될 원소가 남은 상황에서 뽑힌 것 뒤부터 마지막 뽑을 것 까지 반복
for next in range(smallest, n):
# next가 돌아가면서 뽑히고 그 때 마다 picked에 저장된다.
picked.append(next)
# next가 뽑혀 picked에 저장되고 뽑을 개수가 하나 줄어든 상황
pick(n, picked, toPick - 1)
#
picked.pop()
pick(5, [], 3)
|
cs |
출처 : 프로그래밍 대회에서 배우는 알고리즘 문제해결전략
반응형
'알고리즘 학습 > 종만북 with 파이썬' 카테고리의 다른 글
종만북 8장 [w/python] - 와일드카드 (0) | 2020.08.18 |
---|---|
종만북 8장 [w/ Python] (0) | 2020.08.12 |
종만북 7장 [w/ Python] (0) | 2020.08.08 |
종만북 3장 (0) | 2020.07.31 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬알고리즘인터뷰#4장
- Triangle#Sorting#Codility#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 암호코드#dp#BOJ#Python
- 백준 알고리즘#BackTracking
- 병든 나이트#BOJ#탐욕법#Python
- 날짜 계산#BOJ#완전탐색#Python
- 섬의개수#백준알고리즘#Python
- 쿼드트리#BOJ#분할정복#Python
- 리모컨#완전탐색#BOJ#Python
- 종이자르기#분할정복#BOJ#Python
- 터틀비치#리콘#xbox#controller
- django#slicing
- django
- Brackets#Stacks and Queues#Codility#Python
- 배열합치기#분할정복#BOJ#Python
- 공유기 설치#BOJ#이분탐색#Python
- 미로 탐색#백준알고리즘#Python
- 텀 프로젝트#백준알고리즘#Python
- Distinct#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- N으로 표현#DP#Programmers#Python
- 랜선자르기#이분탐색#BOJ#Python
- API#lazy#
- 반복수열#백준알고리즘#Python
- PassingCars#Codility#Python
- Swift#Tuples#Range
- 토마토#백준알고리즘#Python
- 순열사이클#BOJ#Python
- filter#isalnum#lower
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함