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 |
Tags
- 알고리즘
- 고 라우터
- 네트워크
- 멀티모듈 고 라우터
- Algorithm
- Jira Slack 연동
- ci/cd
- flutter interceptor
- 멀티패키지
- 단편화
- Flutter
- 인터셉터 구현
- Flutter Network Interceptor
- Match
- Flutter Netwrok Logging
- Swift
- ios
- 패킷
- Flutter Logging
- IP
- Di
- 플러터 인터셉터
- 스위프트
- Python
- 펍 워크스페이스
- Bitbucket Slack 연동
- pub workspace go_router
- 난수
- go_router
- 플러터
Archives
- Today
- Total
INEEDACHACHA
Combination (조합) 본문
조합의 개념
- 조합은 서로 다른 n개의 사물 중에서 r개를 순서에 상관없이 선택하는 경우의 수를 구하는 것을 말한다.
- 조합을 구하는 경우에는 nCr 또는 nCr-r로 표기한다
- 조합을 구하는 방법은 다음과 같다.
- nCr = n! / (r!(n-r)!): n개의 인덱스 중에서 r개를 순서에 상관 없이 선택하는 경우의 수를 계산한다.
구현(재귀)
n = 6
r = 3
arr: [int] = [1,2,3,4,5,6]
result: [int] = []
def combination(n: int, r: int, start: int):
if len(result) == r:
print(result)
return
for i in range(start,n):
result.append(i)
combination(n,r,i+1)
result.pop()
combination(n,r,0)구현(반복문)
- 코딩테스트를 볼 때 3개 이하일 경우에 중첩 반복문을 사용한다.
- IDE를 못 쓰거나 자동완성이 없는 경우 재귀를 물론 외우지만 실수할 수 있기 때문이다.
def combination_iterator(n: int, r: int):
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
print("i: {0}, j: {1}, k: {2}".format(i, j, k))주의
알고리즘을 풀 때 주의해야하는 것이 있다.
조합은 서로 다른 n개의 사물 중에서 r개를 순서에 상관없이 선택하는 것이지만
알고리즘 문제를 풀 때는 서로다른 n개의 인덱스를 뽑는 것이다.
arr: [int] = [a,a,a,b,f]상기의 형태로 문제가 주어진다고 해도
인덱스만 다르다면 [a,a,b], [a,a,b]도 다를 수 있다.
중복조합
def combination(n: int, r: int, start: int):
if len(result) == r:
print(result)
return
for i in range(start,n):
result.append(i)
combination(n,r,i)
result.pop()
- 중복조합을 만들려면 combination을 다시 호출하는 부분에서 인덱스를 증가시키지 않으면 된다.
- 재귀로 만드는 combination에서는 start에 +1을 더해주고 호출하는 것의 의미는 뽑은 것은 안 뽑는다는 의미를 갖는다.
- 따라서 +1을 안 하면 나 자신을 포함해서 다시 뽑기 때문에 중복조합을 만들 수 있다.
'Algorithm > Basic' 카테고리의 다른 글
| 그래프 탐색 - BFS (너비 우선 탐색) (0) | 2024.02.27 |
|---|---|
| 그래프 탐색 - DFS (깊이 우선 탐색) (0) | 2024.02.25 |
| 에라토스테네스의 체 (0) | 2024.02.25 |
| Graph & Tree (그래프와 트리 개념) (0) | 2024.02.22 |
| Permutation(순열) (0) | 2024.02.22 |