C++ 표준 템플릿 라이브러리(STL) 알고리즘 핵심 정리 및 활용 가이드
1. 비변형 시퀀스 알고리즘 (Non-modifying Sequence Operations)
컨테이너의 원소를 직접 변경하지 않고 탐색하거나 검사하는 알고리즘들입니다.
1.1 탐색 (find 계열)
find(first, last, value): 특정 값과 일치하는 첫 번째 원소의 반복자를 반환합니다.
find_if(first, last, pred): 조건자(predicate)를 만족하는 첫 번째 원소를 찾습니다.
find_end(first1, last1, ...
7월 6일 03:14에 게시됨
배열에서 K번째로 큰 원소 찾기
문제 개요정렬되지 않은 정수 배열에서 k번째로 큰 원소를 찾는 알고리즘 문제입니다. 예를 들어 [3,2,1,5,6,4]에서 k=2일 경우 결과는 5가 됩니다.접근법 1: 최소 힙 활용크기가 k인 최소 힙을 유지하면 효율적으로 해결할 수 있습니다. 힙의 루트는 항상 현재까지 본 원소 중 k번째로 큰 값이 됩니다.class KthElementFinder {
public int findKthLargest(int[] arr, ...
6월 30일 22:32에 게시됨
그리디 알고리즘과 수학적 사고를 활용한 문제 해결
절댓값 부등식을 이용한 최소 거리 선택
절댓값의 성질에 따르면 |x-a| + |x+b| ≥ |a-b| 이며 등호가 성립하려면 x는 a와 b 사이에 위치해야 합니다. 따라서 각 점에서 특정 x까지의 거리 합을 최소화하려면 x는 중앙값에 위치해야 합니다.
주어진 숫자 집합으로 만들 수 없는 최소 양수 찾기
[1,x] 범위의 모든 수를 만들 수 있을 때, 사용하지 않은 가장 작은 수가 a라 ...
6월 30일 04:08에 게시됨
NOIP 2023 알고리즘 문제 풀이
문제 1: 간단한 문자열 처리
첫 번째 문제는 매우 straightforward합니다. 각 행의 문자를 추출하여 정렬한 후 최소 문자열을 만들고, 역순으로 배치하여 최대 문자열을 만들면 됩니다.
코드 확인하기
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<typename T>
void processRange(T* start, T* end, function<void(T*)& ...
6월 29일 21:06에 게시됨
조합 합계 문제의 효율적 구현과 최적화 전략
1. 문제 정의
중복되지 않는 양의 정수 배열 candidates와 양의 정수 target이 주어졌을 때, 합이 target이 되는 모든 고유한 조합을 찾는 문제입니다. 배열의 각 요소는 무제한으로 재사용할 수 있으며, 요소의 순서만 다른 조합은 동일한 것으로 간주합니다. 이 문제의 핵심은 최적의 해를 찾는 것이 아니라 조건을 만족하는 모든 해를 탐색하는 것이므로, 백트래킹이 기 ...
6월 18일 16:14에 게시됨
C++ STL 알고리즘 완전 정복
1. 비수정 시퀀스 알고리즘
이 알고리즘들은 컨테이너의 요소를 변경하지 않고 조작합니다.
1.1 find 및 find_if
find(begin, end, value): value와 첫 번째로 일치하는 요소를 찾아 반복자를 반환합니다 (찾지 못하면 end 반환).
find_if(begin, end, predicate): 조건자를 만족하는 첫 번째 요소를 찾습니다.
find_end(begin, end, sub_begin, sub_end): 서브시퀀스 ...
6월 15일 00:03에 게시됨
C++ 다중 기준 정렬 구현 방법
이원 정렬의 개념
알고리즘 문제 풀이 과정에서 두 가지 이상의 데이터를 묶어서 정렬해야 하는 상황을 자주 접하게 됩니다. 예를 들어, 길이가 $n$인 두 수열 $A = \{a_1, a_2, \dots, a_n\}$과 $B = \{b_1, b_2, \dots, b_n\}$이 주어졌을 때, 먼저 $a_i$를 기준으로 오름차순 정렬하고, $a_i$ 값이 같다면 $b_i$를 기준으로 다시 오름차순 정렬하는 방식입니다. 이를 C+ ...
6월 4일 17:03에 게시됨
C++ STL 알고리즘 종합 가이드
1. 비변경 시퀀스 알고리즘
이 알고리즘들은 대상 컨테이너의 요소들을 수정하지 않고 동작합니다.
1.1 검색 관련 함수
find(start, end, target): 특정 값과 일치하는 첫 번째 요소를 찾습니다.
find_if(start, end, condition): 조건을 만족하는 첫 번째 요소를 탐색합니다.
find_end(start, end, pattern_start, pattern_end): 하위 시퀀스가 마지막으로 나타나는 위치 ...
5월 30일 17:57에 게시됨
그리디 알고리즘 문제 풀이:柠檬水找零,身高重建队列,气球射箭
柠檬水找零 문제
입력과 응답 시나리오가 고정된 문제의 경우, 단순하게 구현하면 된다.
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
unordered_map cash;
for(int i = 0;i < bills.size();i++){
int change = bills[i] - 5;
if(change == 0){
cash[bills[i]]++;
...
5월 26일 00:32에 게시됨