Loading...
2023. 7. 2. 02:29

C++ 알고리즘 기초22 -배열 심화2(최대, 최소 찾기, 정렬하기, 그리디 연습)-

1. 연습문제1 n개의 원소와 q개의 질의가 주어졌을 때 n개의 원소에 대해 각 질의를 수행하는 프로그램을 작성해보세요. 질의의 종류는 다음과 같습니다. 1 a a번째 원소를 출력합니다. 2 a 숫자 a가 있는지를 판단합니다. 만약 있다면 해당 원소가 몇 번째 원소인지를 출력합니다. 숫자 a가 2개 이상 있다면 index가 더 작은 원소를 출력합니다. 만약 a가 없다면 0을 출력합니다. 3 a b a번째 원소부터 b번째 원소까지 순서대로 공백을 사이에 두고 출력합니다. 문제 요구하는대로 구현하면 된다 a번째랑 index가 a인 것은 다르니까 헷갈리지 말고 C++ 특성상 첫 숫자 1,2,3중 하나를 받아 1,2,3인지 체크하고, 1,2면 하나만 더 받고 3이면 2개를 받고 #include using nam..

2022. 9. 28. 21:54

병합 정렬(merge sort) 알고리즘 파헤치기

1. 병합정렬(merge sort) 여러개의 정렬된 자료의 집합을 병합하여 한 개의 정렬된 집합으로 만드는 방식 분할 정복 알고리즘을 활용함 주어진 자료를 최소 단위의 문제까지 나눈 다음에 차례대로 정렬해가면서 최종 결과를 얻어내는 방식 시간복잡도는 O(nlogn) 2. 개요 - 간단한 과정 - [69,10,30,2,16,8,31,22]를 병합정렬한다면?? 2-1) 분할과정 절반씩 자료를 왼쪽, 오른쪽으로 나눠가고 더 이상 쪼갤 수 없을때까지 반복해서 나눈다 2-2) 병합과정 가장 밑단의 왼쪽 부분집합과 오른쪽 부분집합의 원소 크기를 서로 비교하여 정렬하여 병합시키고, 최종 1개로 병합될때까지 반복함 3. 구현 길이가 1이면 정렬하지말고, 바로 return 길이가 1보다 크다면, 왼쪽과 오른쪽을 나눠준다..

2022. 8. 11. 02:53

조건을 만족할때 매우 빠른 정렬 - counting sort

1. counting sort(카운팅 정렬) 항목들의 순서를 결정하기 위해 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하여, 선형 시간에 정렬하는 효율적인 알고리즘 하지만 제한사항이 있다 정수나 정수로 표현할 수 있는 자료에 대해서만 적용가능하다 - 각 항목의 발생 횟수를 기록하고자 정수로 인덱스 되는 카운팅 배열을 사용하기 때문 카운트들을 위한 충분한 공간을 할당하려면 집합 내의 가장 큰 정수를 알아야한다. 전제조건이 중요함 예를 들어 "0에서 1000이하의 정수이다" 이런 제한조건을 알고 있어야함 음수있으면 안된다는데.. 있어도 될것 같기는 한디 시간복잡도는 O(n+k)의 선형시간(n은 리스트의 길이, k는 정수의 최댓값) 2. 알고리즘 과정 2-1) 주어진 리스트에 등장하는 정수들이 각각 몇개 ..