버블 정렬 알고리즘의 원리와 구현

알고리즘 개념 설명 버블 정렬(Bubble Sort)은 인접한 두 요소를 비교하여 필요 시 교환하는 방식으로 작동하는 간단한 정렬 기법입니다. 배열 내에서 가장 큰 값이 거품(bubble)처럼 점차 끝으로 밀려나가기 때문에 이 이름이 붙었습니다. n개의 원소로 구성된 배열을 정렬한다고 가정할 때, 첫 번째 패스에서는 처음부터 끝까지 인접한 원소들을 비교하며 더 큰 값을 오 ...

6월 15일 17:34에 게시됨

백트래킹, 그리디, 분할정복, 동적계획법 알고리즘 비교

백트래킹 알고리즘 백트래킹은 해결 가능한 모든 경로를 탐색하는 알고리즘으로, 재귀 호출을 통해 결정 트리를 탐색하며 실패 시 이전 상태로 돌아가는 방식을 사용합니다. def backtrack(current_path, choices): if is_solution(current_path): add_to_result(current_path) return for choice in choices: if not is_valid(ch ...

6월 15일 16:23에 게시됨

재귀와 백트래킹: 알고리즘 문제 해결 전략

이번专题에서는 재귀와 백트래킹 알고리즘에 대해 심도 있게 다루어 보겠습니다. 주로 온라인 저지 사이트에서 수집한 문제들을 바탕으로 설명하며, 필요한 경우 예제 코드를 포함합니다. 순열과 조합 ======= 1.1 기본 조합 문제(출처: leetcode) 문제: 두 정수 n과 k가 주어졌을 때, 1부터 n까지의 정수 중에서 k개를 선택하는 모든 조합을 반환합니다. class Solution ...

6월 14일 19:45에 게시됨

무료 자바스크립트 알고리즘 학습 프로젝트 실전 가이드

알고리즘 학습을 위한 효과적인 오픈소스 프로젝트를 소개한다. javascript-algorithms는 200개 이상의 알고리즘과 자료 구조를 자바스크립트로 구현한 저장소로, 각 모듈마다 상세한 설명, 테스트 코드, 성능 분석이 포함되어 있다. 프로젝트 구조 이해하기 이 프로젝트는 모듈식 설계를 채택하여 각 알고리즘이 독립된 모듈로 존재한다. 다음은 주요 디렉터리 구조다: ...

6월 14일 00:37에 게시됨

2025년 11월 12일 알고리즘 대회 라운드 2 후기

T1: 중위값이 특정 값인 홀수 길이 부분 배열 개수 세기 주어진 순열에서 특정 수 ( b )를 중위값으로 가지는 홀수 길이의 부분 배열의 수를 구하는 문제이다. 핵심 아이디어는 각 원소를 ( b )보다 작으면 -1, 크면 1, 같으면 0으로 변환한 후, 누적합을 이용해 조건을 만족하는 쌍을 찾는 것이다. ( b )의 위치를 기준으로 오른쪽은 해시맵에 누적합을 저장하고, 왼쪽에 ...

6월 13일 22:08에 게시됨

AtCoder Beginner Contest 357 문제 분석 및 풀이

A - 손 소독하기 N명의 외계인이 순차적으로 손을 소독하려고 합니다. 각 외계인은 H_i개의 손을 가지고 있으며, 전체를 소독해야 합니다. 소독제는 총 M회 사용할 수 있습니다. 한 외계인이 소독을 할 때 필요한 양만큼만 사용하며, 부족하면 남은 양만 소모합니다. 모든 손을 소독한 외계인의 수를 구하세요. 단순히 앞에서부터 순회하면서 소독제 잔량을 갱신하고, 소진 ...

6월 13일 19:05에 게시됨

C 언어 함수 실습 예제 모음

성적 등급 변환 함수정수형 점수를 입력받아 등급 문자를 반환하는 함수를 구현합니다. 10점 단위로 구간을 나누어 A부터 E까지의 등급을 부여합니다.#include <stdio.h> char calculate_grade(int mark); int main() { int mark; char level; while (scanf("%d", &mark) != EOF) { level = calculate_grade(mark); printf("점수 ...

6월 13일 17:10에 게시됨

KMP 문자열 매칭 알고리즘 C++ 구현과 next 배열 생성 원리

KMP(Knuth-Morris-Pratt) 알고리즘은 문자열 매칭 문제를 해결하는 효율적인 알고리즘으로, 기존의 브루트 포스 방식이 O(n*m)의 시간 복잡도를 가지는 반면, 패턴 문자열을 전처리하여 next 배열을 생성함으로써 O(n+m)의 시간 복잡도로 최적화합니다(여기서 n은 메인 문자열의 길이, m은 패턴 문자열의 길이). 본 글에서는 핵심 원리를 바탕으로 C++ 코드를 통해 KMP 알 ...

6월 12일 22:20에 게시됨

AtCoder Beginner Contest 380 문제 분석 및 풀이

A: 문자열 패턴 확인 주어진 문자열에서 '1', '2', '3'의 등장 횟수를 세어, 각각 1개, 2개, 3개인지 검사한다. 이를 위해 배열을 사용해 각 숫자의 빈도를 저장하고 조건을 비교한다. #include <iostream> #include <string> using namespace std; void solve() { string s; cin >> s; int cnt[4] = {}; for (char c : s) cnt[c - '0' ...

6월 10일 01:13에 게시됨

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에 게시됨