퀵 정렬
퀵 정렬 : 주어진 배열을 두 개로 분할하고, 각각을 정렬한다 병합 정렬과의 차이점 1. 퀵 정렬은 분할 시에 pivot item을 중심으로, 이보다 작은 것은 왼편, 큰 것은 오른편에 위치시킨다. 2. 각 부분 정렬이 끝난 후, 병합 정렬은 병합하는 과정이 필요하나 퀵 정렬은 후처리가 필요하지 않다. 아이디어 - pivot보다 큰 값은 오른쪽, 작은 값들은 왼쪽 집합에 위치하도록 한다. - 피봇을 두 집합의 가운데에 위치시킨다. 구현 def partition(l, r): # 피봇을 A[l]로 설정 pivot = A[l] i, j = l, r # i, j가 교차하면 i, j는 피봇을 기준으로 작은 값과 큰 값들의 경계에 위치 while i
2022. 9. 26.
조합
조합 : 서로 다른 n개의 원소 중 r개를 순서 없이 골라낸 것 조합의 수식 1. 반복문을 통한 조합 생성 # 0, 1, 2, 3, 4 중 3개의 숫자 조합 만들기 N = 5 for i in range(N-2): for j in range(i+1, N-1): for k in range(j+1, N): print(i, j, k) ''' 0 1 2 0 1 3 0 1 4 0 2 3 0 2 4 0 3 4 1 2 3 1 2 4 1 3 4 2 3 4 ''' 2. 재귀 호출을 이용한 조합 생성 def nCr(n, r, s): if r == 0: print(*comb) else: # s -> 선택할 수 있는 구간의 시작 # s부터 마지막 데이터 중 선택할거야 for i in range(s, n-r+1): comb[r-..
2022. 9. 21.