코딩테스트/백준

    [골5] 13549 - 숨바꼭질 3

    #include #include #include #include #include using namespace std; using IntPair = pair; #define MAX 100001 bool vis[MAX]; int MinSec(int n, int k) { priority_queue q; // 경과 시간을 기준으로 우선순위 큐 (짧을수록 우선순위 크다) q.push({ 0, n }); vis[n] = true; while (!q.empty()) { auto top = q.top(); q.pop(); int curSec = top.first, curLoc = top.second; // 목적지 도달 if (curLoc == k) return curS..

    [골4] 1967 - 트리의 지름

    #include #include #include using namespace std; #define MAX 10002 vector node[MAX]; bool vis[MAX]; int res, endPoint; void DFS(int p = 1, int len = 0) { if (vis[p]) return; vis[p] = true; if (res ..

    [실3] 2407 - 조합

    #include #include #include #include using namespace std; #define MAX 101 int n, m; string Cache[MAX][MAX]; string BigNumAdd(string num1, string num2) { string res; long long sum = 0; while (!num1.empty() || !num2.empty() || sum) { if (!num1.empty()) { sum += num1.back() - '0'; num1.pop_back(); } if (!num2.empty()) { sum += num2.back() - '0'; num2.pop_back(); } res.push_back((sum % 10) + '0'); su..

    [골4] 11404 - 플로이드

    #include #include using namespace std; #define MAX 987654321 int info[101][101]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // 0번부터 100번까지 채움 fill(info[0], info[101], MAX); int n, m; cin >> n >> m; for (int i = 1; i > from >> to >> cost; info[from][to] = min(info[from][to], cost); } for (int k = 1; k

    [골5] 15686 - 치킨 배달

    #include #include #include #include #include using namespace std; using IntPair = pair; #define y first #define x second vector board; vector house, chicken; int m, n, res = 0; bool vis[13]; int distance(IntPair a, IntPair b) { return abs(a.y - b.y) + abs(a.x - b.x); } void DFS(int start = 0, int end = 0) { if (end == m) { int tmpRes = 0; for (int i = 0; i < house.size(); i++) { int dist = INT_M..

    [골4] 1504 - 특정한 최단 경로

    #include #include #include #include using namespace std; using IntPair = pair; #define y first #define x second vector adj[805]; int d[805]; priority_queue pq; const int MAX = 4e8; int N, E; void Dijk(int start) { fill(d, d + N + 2, MAX); d[start] = 0; //첫 번째 길이, 두 번째 정점 pq.push({ d[start],start }); while (!pq.empty()) { auto cur = pq.top(); pq.pop(); if (d[cur.x] != cur.y) continue; for (auto n..

    [골4] 1043 - 거짓말

    #include #include #include #include using namespace std; #define MAX 50 vector v(MAX); vector know; int parents[MAX]; int n, m, k; int Find(int x) { return x = (parents[x] == x) ? x : Find(parents[x]); } void Union(int x, int y) { parents[Find(x)] = Find(y); } int main() { ios::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(NULL); cin >> n >> m >> k; // 배열 초기화 while (k--) { int t; cin >> t; k..

    [골5] 1916 - 최소 비용 구하기

    #include #include #include #include #define INF 1e9 + 10 #define MAX 1001 #define y first #define x second using namespace std; using IntPair = pair; vector g[MAX]; priority_queue pq; vector dist(MAX, INF); int src, dst; void Dijkstra() { pq.push({ 0,src }); dist[src] = 0; while(!pq.empty()) { int cost = -pq.top().y; int cur = pq.top().x; pq.pop(); if (dist[cur] < cost) continue; for (int i = 0;..

    [골4] 1753 - 최단 경로

    #include #include #include #include #define INF 1e9 + 10 #define pi pair int v, e, st; using namespace std; vector adj[20005]; int d[20005] = { 0, }; void Dijkstra() { fill(d, d + 20005, INF); priority_queue pq; d[st] = 0; pq.push({ d[st],st }); while (!pq.empty()) { auto cur = pq.top(); pq.pop(); int dist = cur.first, idx = cur.second; if (d[idx] != dist) continue; for (auto& [cost, nidx] : adj..

    [골4] 14502 - 연구소

    참고해서 코드 작성 #include #include #include #include #define y first #define x second using namespace std; using IntPair = pair; using TwoDVec = vector; IntPair dir[] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }; TwoDVec m, vm; vector vis; int h, w, ans = 0; // 바이러스 지도 초기화 함수 void SetMap() { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) vm[i][j] = m[i][j]; } } void SpreadVirus() { queue q;..