알고리즘 디버깅 노트: 실수에서 배우는 최적화
경험을 통해 배운 디버깅 사례들을 정리합니다. 비슷한 실수를 반복하지 않기 위한 기록입니다.
위상 정렬: 인덱스 실수
원본 코드:
while (front < rear) {
int cur = queue[front++];
for (int idx = adj[cur]; idx; idx = nxt[idx]) {
int nxtNode = to[idx]; // 정상
indeg[nxtNode]--;
if (indeg[nxtNode] == 0) {
...
6월 25일 21:08에 게시됨
USACO 2023년 2월 대회 브론즈 문제 해설
USACO 2023 February Contest, Bronze
1. 배고픈 소 (Hungry Cow)
매일 저녁에 소 베시(베시)는 창고에 건초가 있으면 한 개의 건초를 먹는다. 농부 존은 베시가 배고픈思いをしない 있도록 특정 날짜에 건초를 배달한다. 구체적으로, 날짜 di에 bi개의 건초가 아침에 배달된다. 첫 번째 T일까지 베시가 먹을 건초의 총 개수를 계산하는 문제이다.
문제 분석
각 날짜에 ...
6월 24일 18:56에 게시됨
C++ STL 알고리즘 종합 가이드
1. 비수정 시퀀스 알고리즘
이 알고리즘들은 작업하는 컨테이너의 요소를 변경하지 않습니다.
1.1 find와 find_if
find(begin, end, value): value와 같은 첫 번째 요소를 찾아 반복자를 반환합니다. (찾지 못하면 end 반환)
find_if(begin, end, predicate): 조건자(predicate)를 만족하는 첫 번째 요소를 찾습니다.
find_end(begin, end, sub_begin, sub_e ...
6월 21일 02:44에 게시됨
AC 자동기와 Luogu 문제 해결: P3808 및 P3796
AC 자동기概述
AC 자동기(Aho-Corasick Automaton)는 여러 개의 패턴을 동시에 검색할 때 사용하는高效的인 알고리즘이다. KMP 알고리즘의 확장판이라고 볼 수 있으며, Trie 트리와 실패 함수(Failure Function)를 결합하여 구현한다. 이 알고리즘은 텍스트 하나에서 여러 개의 패턴이 등장하는 횟수를 모두 찾을 수 있다.
문제介绍
본 article에서는 Luogu의 두 가지 ...
6월 21일 00:20에 게시됨
C# 해시 테이블을 활용한 알고리즘 문제 해결 및 최적화 기법
242. 유효한 애너그램 (Valid Anagram)
두 문자열이 서로 애너그램 관계인지 확인하는 문제입니다. 애너그램이란 문자의 순서만 다르고 구성 문자와 그 개수가 동일한 경우를 의미합니다.
최적화된 구현
문자열의 길이가 다르면 애너그램이 될 수 없으므로 조기 반환(Early Return)을 적용합니다. 또한, 소문자 알파벳으로만 구성된다는 제약 조건이 있으므로 해시 테이블 ...
6월 20일 05:26에 게시됨
알고리즘 문제 해결 및 코드 구현
트리의 깊이 우선 탐색 순서 최적화
주어진 트리에서 각 노드는 고유한 가중치를 가지고 있으며, 루트 노드는 1번입니다. DFS 순서에서 짝수 위치에 있는 노드들의 가중치 합을 최대화하는 것이 목표입니다.
문제 해결 방법
이 문제는 트리형태의 동적 프로그래밍(DP)으로 접근할 수 있습니다. 각 서브트리가 제공할 수 있는 최대 점수를 계산하며 진행합니다. 서브트 ...
6월 19일 22:53에 게시됨
2025년 2월 셋째 주 알고리즘 훈련 요약
알고리즘 훈련 주간 리뷰 (2.17 ~ 2.23)
훈련 종료 및 소감
겨울 방학 동안 진행된 알고리즘 훈련이 이번 주를 끝으로 종료되었습니다. 전반적인 훈련 성과는 아쉬운 수준이었으며, 집중력 저하가 두드러졌습니다. 자택 환경에서는 자연스럽게 느슨해지는 경향이 있었고, 학교 내에서의 학습 효율성에 비하면 현저히 떨어졌습니다. 개학 이후에는 이러한 태도를 개선하고 ...
6월 19일 20:22에 게시됨
ABC362 문제 해설
A 문제
문제는 매우 간단합니다. 세 정수 r, g, b와 문자열 c가 주어집니다. c가 "Red"이면 g와 b 중 최솟값을, "Blue"이면 r와 g 중 최솟값을, 그 외의 경우 r와 b 중 최솟값을 출력하면 됩니다.
코드 보기
#include<bits/stdc++.h>
using namespace std;
int main(){
int red, green, blue;
string color;
cin >> red > ...
6월 19일 01:43에 게시됨
연결 리스트 알고리즘 문제 풀이
연결 리스트 요소 제거
문제 설명:
주어진 연결 리스트에서 특정 값을 가진 모든 노드를 제거하는 문제이다.
解题 전략:
노드를 삭제할 때 현재 노드의 next 포인터를 다음 노드의 next로 변경하면 된다. C++을 사용하므로 메모리 해제도 반드시 처리해야 한다. 더미 노드를 사용하면 헤드 노드의特殊性한 경우를 처리할 필요가 없어져 코드가 간단해진다.
구현 코드:
...
6월 17일 19:49에 게시됨
:NOIP 시뮬레이션 경진대회 문제 풀이
T1 다채로운 색상
문제는 다음과 같습니다:
nxm 크기의 행렬이 주어집니다.
(i,j) 위치에는 색깔 ci,j가 있습니다.
네 모서리의 색상이 모두 동일하지 않은 모든 하위 행렬의 수를 구하세요.
시간 복잡도 O(n²m)으로 해결할 수 있습니다. 두 행을 선택한 뒤 열을 스캔하면서 해당 열의 값들이 같으면 답에 기여할 가능성이 있습니다. 이를 위해 카운트 배열을 ...
6월 17일 19:19에 게시됨