목록정렬 (5)
차밍이
목차 1. 퀵 정렬 (Quick Sort) 이란? 정렬 알고리즘의 꽃 기준점(pivot이라 부름)을 정해서, 기준점보다 작은 데이터는 왼쪽, 크면 오른쪽으로 모으는 함수를 작성한다. 왼쪽과 오른쪽은 재귀 용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복한다. 함수는 왼쪽 + pivot + 오른쪽 을 출력한다. 분할 정복에 속하는 정렬이라고 할 수 있다. 2. 퀵 정렬 코드 작성 소스코드 data_list = [49, 97, 53, 5, 33, 65, 62, 51] def quick_sort(num_list): if len(num_list) >> [5, 33, 49, 51, 53, 62, 65, 97] 알고리즘 구현 및 풀이 quicksort 함수 만들기 만약 리스트 개수가 한 개이면 해당 리스트..
목차 1. 정의 동적계획법(Dynamic Programming) "DP"라고 많이 부름 큰 문제를 해결하기 위해, 작은 문제를 부분 부분 해결하여 저장해놓고 사용한다. 상향식 접근법으로 가장 최하위 해답을 구한 후, 이를 저장하고, 해당 결과를 이용해서 상위 문제를 해결한다. Memoization 기법을 사용한다. 문제를 잘게 쪼갤 때, 부분 문제는 중복되어, 재활용된다. ex) 피보나치 수열 분할 정복(Divide and Conquer) 문제를 나눌 수 없을 때까지 나누어서 각각 문제를 풀면서 다시 합병하여 문제의 해답을 찾는다. 다시 합병한다. 하양식 접근법, 상위의 해답을 구하기 위해, 아래로 내려가면서 하위의 해답을 구하는 방식 일반적으로 재귀 함수로 구현 문제를 잘게 쪼갤 때, 부분 문제는 서로..
1. 선택 정렬 이란? 주어진 데이터 중, 최솟값을 찾는다. 해당 최소값을 가장 맨 앞의 데이터의 위차와 교체한다. 맨 앞의 최소값 데이터를 제외한 나머지 데이터를 대상으로 동일한 방법을 반복한다. 2. 예제 코드 import random data_list = random.sample(range(100), 10) print(data_list, end="\n\n") for i in range(len(data_list)-1): index = i for j in range(len(data_list)-i): if data_list[index] > data_list[j+i]: index = j+i data_list[index], data_list[i] = data_list[i], data_list[index] p..
목차 1. 삽입 정렬 방식 두 번째 인덱스에서부터 시작하여 데이터를 확인한다. 앞에 있는 데이터들과 하나씩 비교하면서 자신의 자리를 찾아나간다. 가장 작은 값이면 맨 앞까지 계속 이동한다. 혹은 자기보다 작은 데이터가 앞에 있으면 그 뒤쪽으로 데이터를 삽입한다. 2. 소스 코드 import random data_list = random.sample(range(100), 10) print(data_list) >>> [24, 62, 17, 81, 74, 55, 92, 93, 82, 53] 랜덤으로 정렬하기 위한 숫자 데이터 리스트를 생성한다. for i in range(1, len(data_list)): for j in range(i-1,-1,-1): if data_list[j] > data_list[j+1..
수 정렬하기 3 성공 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 3 초 (하단 참고) 8 MB (하단 참고) 55303 11759 8772 22.857% 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 복사 10 5 2 3 1 4 2 3 5 1 7 예제 출력 1 복사 1 1 2 2 3 3 4 5 5 7 소스코드 import sys n = int(sys.stdin.readline()) numb..