정렬 알고리즘 6

프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기

즉, citations 배열에서 h 이상의 값을 가지는 원소가 h개 이상인 h의 최대값을 찾는 것이다. 문제 설명이 다소 혼란스러워서 문제 자체를 이해하는 데에 어려움을 겪는 사람이 많아보였다. 나도 문제를 읽으면 읽을수록 헷갈렸기에, 주의할 점과 테스트 케이스를 자세히 적어보았다. 주의해야 할 점 1. h가 반드시 citations 배열의 원소값이어야 하는 것은 아니다. -> citations = [10, 9, 4, 1, 1], answer = 3 2. h 이상의 값을 가지는 원소가 h개여야 하는 것은 아니다. -> citations = [0, 1, 1], answer = 1 3. h 값은 citations 배열의 size 값보다 큰 값일 수 없다. -> citations = [31,66], answe..

기본 정렬 알고리즘 : 병합 정렬, 퀵 정렬

참고 : 선택 정렬, 삽입 정렬, 버블 정렬https://hyunah-home.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%84%A0%ED%83%9D%EC%A0%95%EB%A0%AC-%EC%82%BD%EC%9E%85%EC%A0%95%EB%A0%AC-%EB%B2%84%EB%B8%94%EC%A0%95%EB%A0%AC 기본 정렬 알고리즘 : 선택정렬, 삽입정렬, 버블정렬 정렬 : 물건을 크기 순으로 오름차순이나 내림차순으로 나열하는 것. 단순하지만 비효율적인 방법의 정렬 알고리즘 : 선택정렬, 삽입정렬, 버블정렬 ① 선택 정렬 ▷ 아이디어 : 정렬된 리스트와 hyunah-home.t..

CS/알고리즘 2021.04.13

기본 정렬 알고리즘 : 선택정렬, 삽입정렬, 버블정렬

정렬 : 물건을 크기 순으로 오름차순이나 내림차순으로 나열하는 것. 단순하지만 비효율적인 방법의 정렬 알고리즘 : 선택정렬, 삽입정렬, 버블정렬 ① 선택 정렬 ▷ 아이디어 : 정렬된 리스트와 정렬 안 된 리스트를 가정함. 정렬 안 된 리스트에서 최소값이나 최대값을 선택해 한쪽으로 몰아넣음. ▷ 알고리즘 ; 오름차순 정렬 기준 1. 오른쪽 리스트에서 최소값의 인덱스 선택 2. 오른쪽 리스트의 첫번째 수의 값과 최소값을 교환 3. 왼쪽 리스트 크기 1 증가, 오른쪽 리스트 크기 1 감소 4. 오른쪽 리스트가 소진될 때까지 1~3 과정 반복 ▷ 프로그램 void selection_sort(int list[], int n){ int least, temp; for (int i = 0; i < n-1; i++) {..

CS/알고리즘 2021.04.12

DAG와 위상정렬(topological sort)

DAG(Directed Acyclic Graph) : 사이클이 없는 방향 그래프. DAG에서 에지 가 있다면 정점 u는 정점 v를 선행함. 위상 정렬(topological sort) : 방향 그래프 정점들의 선행 순서를 위배하지 않으면서 모든 정점을 순서대로 나열하는 것. 선행관계가 없는 것은 뭐가 먼저 나오든지 상관이 없기 때문에 위상 정렬 결과는 여러 가지가 존재할 수 있음. ▷ 알고리즘 1. 진입차수가 0인 임의의 정점(선행자가 없는 정점)을 큐(혹은 스택)에 삽입 2. 정점 개수만큼 시행하는 반복문 생성 3. 반복문 내부에서는, 큐에서 정점을 하나씩 꺼내어 출력하고 출력한 정점에 붙어있는 에지들을 제거하여 진입차수 재계산 4. 진입차수를 재계산하여 진입차수가 0이 된 것은 큐에 삽입 위상정렬이 불..

CS/알고리즘 2021.04.06

프로그래머스/월간 코드 챌린지 시즌 1/두 개 뽑아서 더하기/C++

중요한 점 1. result 배열을 어떻게 오름차순으로 만들 것이냐 -> numbers를 정렬한 후 더하기, result를 정렬하여 반환하기, 자동정렬이 되는 컨테이너를 사용 2. result 배열에서 어떻게 중복을 제거할 것이냐 -> 원소 입력시 이미 존재하는 값의 원소인지 구분, 중복을 허용하지 않는 컨테이너를 사용 원소 간의 중복을 허용하지 않고 자동으로 원소가 오름차순 정렬되는 set 컨테이너를 사용하여 풀면 된다는 것을 알 수 있다. #include #include #include #include using namespace std; vector solution(vector numbers) { set s; for(int i = 0; i

우선순위 큐의 개념과 구현, 힙의 구현과 응용; 힙정렬

우선순위 큐(priority queue) -> 우선순위를 가진 원소들을 저장하는 큐. 들어온 순서에 상관없이 가장 우선순위가 높은 항목이 삭제됨. 스택이나 FIFO 큐도 우선순위 큐의 특별한 형태라고 볼 수 있음. 최소(min) 우선순위 큐와 최대(max) 우선순위 큐 존재. ▷ ADT create() :: = 우선순위 큐를 생성 init(pq) :: = 우선순위 큐 pq를 초기화 is_empty(pq) :: = 우선순위 큐 pq가 비어있는지 검사 is_full(pq) :: = 우선순위 큐 pq가 가득 찼는지 검사 insert(pq, x) :: = 우선순위 큐 pq에 원소 x를 추가 (x값을 우선순위라고 가정) deleteMin(pq) :: = 우선순위 큐 pq로부터 가장 우선순위가 높은 원소를 삭제하고..

CS/자료구조(DS) 2021.03.29