본문 바로가기

알고리즘/이론22

[Leetcode]932. Beautiful Array 문제 요약알고리즘 분류: 분할정복난이도: Medium문제내용:nums는 [1, n] 범위의 정수들의 순열입니다.모든 0 정수 n이 주어졌을 때, 길이가 n인 임의의 아름다운 배열 nums를 반환하세요. 주어진 n에 대해 적어도 하나의 유효한 답이 존재합니다.사이트 주소: https://leetcode.com/problems/beautiful-array/description/문제풀이이 문제를 풀기 위한 핵심 통찰은 분할 정복(Divide and Conquer)을 활용하는 것입니다. 분할 정복에 대한 내용은 아래 글에서 확인 해보면 됩니다.https://jih3508.tistory.com/282 [알고리즘 이론] 분할 정복(Divide and Conquer)분할 정복(Divide and Conquer) 알고.. 2025. 5. 14.
[알고리즘 이론] 분할 정복(Divide and Conquer) 분할 정복(Divide and Conquer) 알고리즘 완벽 가이드1. 분할 정복이란?분할 정복(Divide and Conquer)은 복잡한 문제를 더 작고 관리하기 쉬운 하위 문제들로 나누어 해결하는 알고리즘 패러다임입니다. 이 방법론은 컴퓨터 과학의 여러 분야에서 광범위하게 사용되며, 많은 효율적인 알고리즘의 기초가 됩니다.분할 정복은 다음 세 가지 주요 단계로 구성됩니다:분할(Divide): 원래 문제를 여러 개의 작은 하위 문제로 나눕니다.정복(Conquer): 하위 문제들을 재귀적으로 해결합니다. 하위 문제가 충분히 작으면 직접 해결합니다.결합(Combine): 하위 문제들의 해결책을 결합하여 원래 문제의 해결책을 만듭니다.2. 분할 정복의 장점분할 정복 접근법은 다음과 같은 여러 가지 장점을 .. 2025. 5. 14.
[알고리즘 이론] 계수 정렬(Counting Sort) 1. 계수 정렬이란?계수 정렬(Counting Sort)은 비교 기반이 아닌 정렬 알고리즘으로, 정수나 정수로 표현할 수 있는 데이터를 정렬할 때 사용됩니다. 이 알고리즘은 각 항목이 몇 번 등장하는지 세어서 정렬하는 방식으로 작동합니다. 특히 정수의 범위가 작을 때 매우 효율적인 알고리즘입니다.2. 계수 정렬의 기본 원리계수 정렬의 기본 아이디어는 다음과 같습니다:입력 배열의 최댓값과 최솟값을 찾아 범위를 결정합니다.해당 범위만큼의 크기를 가진 카운트 배열을 생성합니다.입력 배열을 순회하며 각 요소의 출현 횟수를 카운트 배열에 기록합니다.카운트 배열을 누적합으로 변환합니다(선택 사항).누적합을 이용하여 각 요소의 정확한 위치를 계산하고 결과 배열에 배치합니다.3. 계수 정렬 알고리즘 단계별 설명계수 정.. 2025. 4. 23.
[알고리즘 이론] 위상 정렬(Topological Sorting) 위상 정렬(Topological Sort) 알고리즘 이해하기위상 정렬은 방향 그래프(Directed Graph)에서 정점들을 선형으로 나열하는 알고리즘입니다. 이 알고리즘은 선행 관계가 있는 작업들을 순서대로 나열할 때 매우 유용합니다. 오늘은 위상 정렬의 개념부터 구현 방법까지 자세히 알아보겠습니다.위상 정렬이란?위상 정렬은 방향 그래프(DAG, Directed Acyclic Graph)에서 모든 노드를 "선행 순서를 지키는 순서"로 나열하는 알고리즘입니다. 여기서 중요한 것은 그래프에 사이클이 없어야 한다는 점입니다. 사이클이 있다면 선후 관계가 모순되어 위상 정렬을 수행할 수 없습니다.예를 들어, 대학 수업의 선수과목 관계를 생각해봅시다:자료구조를 듣기 위해서는 프로그래밍 기초를 들어야 함알고리즘을.. 2025. 4. 22.
[알고리즘 이론] 큐(Queue) 이론 이본에 볼 자료구조는 큐이다. 스택은 FIFO 입선출인 자료구조이다. 즉 먼저들어간게 먼저 들어 온다는 뜻이다. 큐에 자세한 내용은 아래의 사이트에서 확인해라.https://namu.wiki/w/%ED%81%90(%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0) 큐(자료구조)파일:attachment/큐(자료구조)/queue.png 선입선출(先入先出/First In First Out—FIFnamu.wiki  Javascriptclass Queue{ constructor(){ this.items = []; this.start = 0; this.size = 0; } push(val){ this.items.push(val).. 2025. 3. 21.
[알고리즘 이론] 투 포인터(Two Pointers) 설명은 나중에 올리겠다. 2024. 10. 2.