[백준] 1095번 파이썬 - 마법의 구슬
s+f개의 구슬 중 s개를 뽑는 조합의 개수를 구하고그 개수를 m이하의 사람들에게 모두 같은 개수로 나누어 주면 되는데이 때 m의 값이 최대여야 한다.첫 번째 코드# 1,000,000,000범위 -> 시간복잡도 O(N)import maths,f,m = map(int,input().split())answer = -1# 1. s+f개로 만들 수 있는 조합의 개수 구하기 -> math.comb 시간복잡도 O(logn)combs = math.comb(s+f,s)# 2. m 이하의 사람들이 모두 같은 개수의 조합을 테스트 할 수 있도록 나누기if combs 시간초과 두 번째 코드# 1,000,000,000범위 -> 시간복잡도 O(N)import sysimport mathinput = sys.stdin.readl..
2024. 5. 10.
[백준] 24092번 파이썬 - 퀵 정렬 3
2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, j=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5(i=0, j=1) -> 2 1 3 4 5(i=0, j=2, A[1]" data-og-host="www.acmicpc.net" data-og-source-url="https://www.acmicpc.net/problem/24092" data-og-url="https://www.acmicpc.net/problem/24092" data-og-image=""> 24092번: 알고리즘 수업 - 퀵 정렬 32 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) ->..
2024. 4. 4.
[백준] 24090번 파이썬 - 퀵 정렬 1
2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, j=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5(i=0, j=1) -> 2 1 3 4 5(i=0, j=2, A[1]과 A[2]가" data-og-title="24090번: 알고리즘 수업 - 퀵 정렬 1" data-og-type="website" data-ke-align="alignCenter" data-ke-type="opengraph"> 24090번: 알고리즘 수업 - 퀵 정렬 12 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) -> 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i..
2024. 4. 4.
[Algorithm] 퀵 정렬(quick sort)
퀵 정렬- 기준을 설정한 다음 큰 수와 작은 수를 교환한 후 리스트를 반으로 나누는 동작- 호어 분할 방식 -> 리스트에서 첫번째 데이터를 pivot(기준)으로 정한다. -> 왼쪽에서부터 피벗보다 큰 데이터를, 오른쪽에서부터 피벗보다 작은 데이터를 찾는다. -> 큰 데이터와 작은 데이터의 위치를 서로 교환- 분할된 두 개의 배열에 대해 재귀적으로 이 과정을 반복- 한번 진행될 때마다 최소한 하나의 피벗은 최종적으로 위치가 정해진다- 퀵 정렬의 시간복잡도 : O(NlogN) -> 삽입 정렬과 달리 데이터가 거의 정렬되어 있는 최악의 경우 시간복잡도가 O(N^2) 이다예시array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]def quick_sort(array,..
2024. 4. 4.