무료 자바스크립트 알고리즘 학습 프로젝트 실전 가이드
알고리즘 학습을 위한 효과적인 오픈소스 프로젝트를 소개한다. javascript-algorithms는 200개 이상의 알고리즘과 자료 구조를 자바스크립트로 구현한 저장소로, 각 모듈마다 상세한 설명, 테스트 코드, 성능 분석이 포함되어 있다.
프로젝트 구조 이해하기
이 프로젝트는 모듈식 설계를 채택하여 각 알고리즘이 독립된 모듈로 존재한다. 다음은 주요 디렉터리 구조다:
...
6월 14일 00:37에 게시됨
C 언어로 구현하는 원형 큐 (Circular Queue) 자료구조
원형 버퍼(环形缓冲区)는 전형적인 생산자-소비자(Producer-Consumer) 모델을 구현하는 자료구조입니다. 비유하자면, 생산자가 계속 물을 채우고 소비자가 물을 빼는 웅덩이와 같습니다.
여기서 의문이 생길 수 있습니다. "생산자와 소비자 사이에 왜 굳이 버퍼 메모리 공간을 두는가? 생산자의 파이프 끝을 소비자의 파이프 시작 부분에 직접 연결하면 공간을 절약할 수 ...
6월 11일 20:45에 게시됨
Trie 자료구조 문제 풀이 분석
Luogu P6587 시퀀스 최적화
제약 조건 \(x \le 20\) 활용, ID의 하위 \(x\) 비트를 Trie 구조와 세그먼트 트리 기법으로 처리
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const int MAX_NODES = 4e6 + 5, MAX_ELEMS = 2e5 + 5;
int elem_count, query_count, base_data[MAX_ELEMS];
int child_nodes[MAX_ELEMS*20][2] ...
6월 9일 21:15에 게시됨
세그먼트 트리의 기본 연산과 구현
단일 요소 수정 및 구간 질의
기본적인 세그먼트 트리는 이진 트리 구조로 단일 요소 수정과 구간 질의를 지원합니다:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 200010;
struct TreeNode {
int left, right, max_val;
} tree[MAX_N * 4];
void update_node(int idx) {
tree[idx].max_val = max(tree[idx*2 ...
6월 1일 04:21에 게시됨
문자열 처리 알고리즘: 역순 및 변환 기법
문자열 역순 처리 알고리즘
문자열을 효율적으로 역순으로 처리하는 기본 알고리즘은 두 개의 포인터를 사용하여 문자열의 양쪽 끝에서 중앙으로 이동하며 요소를 교환하는 방식입니다. 이 방법은 공간 복잡도 O(1)로 문자열을 역순으로 만들 수 있어 매우 효율적입니다.
문제 1: 문자열 전체 역순
이 문제에서는 문자 배열을 입력으로 받아 해당 배열의 내용을 역순으로 ...
5월 25일 22:27에 게시됨
파이썬 알고리즘 및 자료구조 기초 문제 풀이
시간 복잡도 비교 문제
AList = [1, 2, 3], BSet = {1, 2, 3}일 때 다음 질문에 답하시오:
값 4를 찾을 때, 리스트와 집합 중 어느 쪽의 최악 시간 복잡도가 더 큰가?
값 4를 삽입할 때, 리스트와 집합 중 어느 쪽의 최악 시간 복잡도가 더 큰가?
답변:
검색 연산의 경우, 리스트와 집합 모두 O(n)의 시간 복잡도를 가진다.
삽입 연산의 경우, 리스트는 O(n), 집합은 평 ...
5월 25일 12:42에 게시됨
NOI 2025 연습 문제 풀이 기록 (제5회)
라운드 #77 - 20250521
A. 직렬 연결 (link)
문제 요약
각 정점에 두 가중치 \(a_i, b_i\)를 가진 트리가 주어진다. 단순 경로가 "좋은 경로"가 되려면 경로상의 \(b\) 합계와 경로상의 최소 \(a\) 값의 곱이 상수 \(V\) 이상이어야 한다. 모든 좋은 경로 중 \(\sum b\)의 최솟값을 구한다.
핵심 아이디어
정점 분할을 적용하면 조건은 \((B_u+B_v)\min(A_u,A_v) \ge V\) ...
5월 24일 02:35에 게시됨
C++ 템플릿 기반 이중 원형 연결 리스트 구현
이중 원형 연결 리스트의 노드 클래스 설계
이중 연결 리스트의 핵심은 각 노드가 이전 노드와 다음 노드를 모두 가리키는 포인터를 가진다는 점입니다. 템플릿을 활용하여 다양한 데이터 타입을 지원하도록 구현합니다.
template<typename T>
class DNode {
public:
T data;
DNode* next;
DNode* prev;
DNode() : data(T()), next(nullptr), p ...
5월 21일 08:11에 게시됨