🎯 요약 정리cin은 빠르지 않음. sync_with_stdio(false)를 써도 fread에는 밀림.fread는 버퍼를 한 번에 통째로 읽기 때문에 cin보다 최대 수십 배 빠를 수 있음입력 받는 과정에서의 오버헤드를 줄여서 빠르게 처리하는 것. 🔍 코드 분석#define bsz 1 = 48) { ret = ret * 10 + tmp - 48; tmp = read(); } return ret;} 🔹 #define bsz 1 bsz는 버퍼 크기를 정하는 건데, 1 는 2의 14승 = 16,384 바이트 (16KB) 를 의미.즉, 한 번에 16KB만큼 입력을 미리 읽어놓겠다는 뜻버퍼의 크기를 몇으로 하든 상관은 없지만, 너무 작지만 않으면 되고 너무 크지만 않으면 된다. 크기를 키우기 전에 ..
❔ 문제https://www.acmicpc.net/problem/15681🔍 문제 요약입력정점 수 N, 루트 정점 R, 쿼리 수 Q 트리 간선 N-1개 (양방향) 쿼리 Q개 (U: 서브트리 루트)출력각 쿼리마다 정점 U를 루트로 하는 서브트리의 크기 출력 ⛔️ 틀린 코드 분석 ❌ 잘못된 접근 코드 1 (Union-Find + 자식 -> 부모 역추적 방식// 15681_트리와쿼리#include#include#includeusing namespace std;#define MAX 100001int union_find[MAX];int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); //트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q ..
❔ 문제https://www.acmicpc.net/problem/15686 🔍 문제 요약입력: N : N × N 크기의 도시 (2 ≤ N ≤ 50)M: 선택할 치킨집 최대 개수 (1 ≤ M ≤ 13)도시 정보 (0 == 빈칸, 1 == 집, 2 == 치킨집)목표: 치킨집 중 M개를 선택했을 때, 도시의 치킨 거리의 최솟값을 구하기⛔️ 틀린 생각 처음에는 단순히 치킨거리의 합이 작은 순서대로 M개를 선택 했는데, 이는 최적의 해를 보장하지 않았다.- 반례4 21 1 0 20 0 2 02 0 0 00 0 0 0답은 4인데 위의 논리로 풀면 5가 나온다. 🔑 해결 전략: 브루트포스 + 조합 탐색모든 치킨집 조합 중 M개를 선택하여, 각 조합마다 도시의 치킨 거리를 계산하고 최솟값을 저장 💙 Step 1:..
📌 개요C++의 헤더에는 순열을 생성하는 두 가지 함수가 있다next_permutation: 사전순 다음 순열을 생성prev_permutation: 사전순 이전 순열을 생성조합/순열 문제에서 굉장히 자주 쓰이며, 특히 비트마스크 조합 탐색과 찰떡궁합이다. 🧠 기본 원형bool next_permutation(Iterator first, Iterator last);bool prev_permutation(Iterator first, Iterator last);현재 순열을 기준으로 다음 / 이전 순열을 생성더 이상 만들 수 있는 순열이 없으면 false 반환 ✅ 예제 1: 숫자 순열 전체 출력vector v = {1, 2, 3};do { for (int x : v) cout 결과: 1 2 3 → 1 ..