Skip to content

Conversation

@hyeokbini
Copy link
Collaborator

@hyeokbini hyeokbini commented Aug 22, 2025

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

๊ณจ๋“œ 4
์ฐจ๋Ÿ‰ ๋ฐฐ์น˜

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

2์‹œ๊ฐ„

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

์šฐ์„  ์ž๋ ฅ์†”์€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ์„ฑ์„ ์ž˜๋ชป ์žก์•˜๋˜ ๊ฒŒ ํฌ๊ฒŒ ๊ตด๋Ÿฌ๊ฐ”๋„ค์š”. ๋ธ”๋กœ๊ทธ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์•„์ด๋””์–ด๋ฅผ ์–ป์–ด์„œ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋‚ด์šฉ์€ ์ฐจ๋Ÿ‰์ด ๊ฐ ์ง€์ ์— ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ๋„๋กœ๋ฅผ ๋”ฐ๋ผ ์ตœ๋Œ€ํ•œ ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ์ง€์ ์œผ๋กœ ๋™์‹œ์— ์ด๋™ํ•  ๋•Œ, ์ถฉ๋Œ(ํ•œ ์ง€์ ์— 2๊ฐœ ์ด์ƒ์˜ ์ฐจ๋Ÿ‰์ด ๋“ค์–ด๊ฐ) ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ์ฐจ๋Ÿ‰์ด 1๋ฒˆ ์ง€์ ์„ ํ†ตํ•ด ๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ฐจ๋Ÿ‰ ๋ฐฐ์น˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ๊ฒƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์‹คํŒจ ์•„์ด๋””์–ด

์ฒซ ์•„์ด๋””์–ด๋Š” ์กฐํ•ฉ + ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ†ตํ•ด ์‹ค์ œ ์ฐจ๋Ÿ‰์„ ๋ฐฐ์น˜ํ•œ ๋’ค, ๋ชจ๋“  ์ฐจ๋Ÿ‰์„ ๋บ„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐจ๋Ÿ‰ ๋ฐฐ์น˜ / ์‹คํŒจ
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<vector<int>> arr;
int ans = 0;

vector<bool> caruse;
queue<int> Q;

void check(const vector<int> &car)
{
    caruse.assign(n, false); 
    Q = {};
    for (int i = 0; i < (int)car.size(); i++)
    {
        caruse[car[i]] = true;
        Q.push(car[i]);
    }
    while (!Q.empty())
    {
        int T = Q.size();
        while (T--)
        {
            int curcaridx = Q.front();
            Q.pop();
            if (curcaridx == 0)
            {
                caruse[0] = false;
                continue;
            }
            if (arr[curcaridx].empty())
            {
                return;
            }

            int nxt = arr[curcaridx][0];

            if (caruse[nxt])
            {
                return;
            }

            caruse[curcaridx] = false;
            caruse[nxt] = true;
            Q.push(nxt);
        }
    }
    ans++;
    return;
}

void func(vector<int> &car, int depth)
{
    if (depth == n)
    {
        return;
    }
    for (int i = depth; i < n; i++)
    {
        car.push_back(i);
        check(car);
        func(car, i + 1);
        car.pop_back();
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    freopen("test.txt", "rt", stdin);
    cin >> n >> m;
    arr.resize(n, vector<int>());
    for (int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        int start = max(a, b);
        int dest = min(a, b);
        arr[start - 1].push_back(dest - 1);
    }
    for (int i = 0; i < n; i++)
    {
        sort(arr[i].begin(), arr[i].end());
    }

    caruse.assign(n, false);

    vector<int> car;
    func(car, 0);
    cout << ans % 1000000007;
    return 0;
}

ํ•˜์ง€๋งŒ ๋ช‡ ๋ฒˆ ์‹œ๋„ํ•ด๋ดค์„ ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ž‘ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.

image

์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๋‹น์—ฐํ•œ ๊ฒฐ๊ณผ์ธ๋ฐ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ๋Š” ๋…ธ๋“œ / ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 20๋งŒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ธŒ๋ฃจํŠธํฌ์Šค ํ˜•์‹์œผ๋กœ๋Š” ์ ˆ๋Œ€ ์‹œ๊ฐ„ ๋‚ด์— ํ†ต๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ๊ฐˆํ”ผ๋ฅผ ๋ชป ์žก๊ณ  ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ํ’€์ด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.


์„ฑ๊ณต ์•„์ด๋””์–ด

๋ฌธ์ œ๋ฅผ ์ž˜ ์ดํ•ดํ•ด ๋ณธ๋‹ค๋ฉด, ํ•ต์‹ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ์ฐจ๋Ÿ‰ ์ถฉ๋Œ์— ๊ด€ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
์ฐจ๋Ÿ‰์ด ์›€์ง์ด๋Š” ํŒจํ„ด์€ ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋„๋กœ๋“ค ์ค‘ ๊ฐ€์žฅ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๊ณ , ๋ชจ๋“  ์ฐจ๋Ÿ‰์€ ๋™์‹œ์— ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฑฐ๊พธ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ(1๋ฒˆ ์ง€์ ) ์—์„œ ํŠน์ •ํ•œ ์ฐจ๋Ÿ‰์˜ ๊นŠ์ด๋ฅผ ๊ณ„์‚ฐํ•œ ํ›„, ๊นŠ์ด๊ฐ€ ์ค‘๋ณต๋˜๋Š” ์ฐจ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ๊ฒฐ๊ตญ 1๋ฒˆ ์ง€์ ์—์„œ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ ˆ๋ฒจ์—์„œ ํ•˜๋‚˜์˜ ์ฐจ๋Ÿ‰์„ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋“  ๋ ˆ๋ฒจ์— ์ง„ํ–‰ํ•œ ๋’ค, ๊ณฑ์…ˆ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://untitledtblog.tistory.com/85

์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค๋ฉด A / B,C / D,E,F๊ฐ€ ๊ฐ™์€ ๋ ˆ๋ฒจ์ด๊ณ , ์ด๋ ‡๊ฒŒ ๋‚˜๋‰œ ๋ชฉ๋ก๋“ค์—์„œ ์ค‘๋ณต๋œ ๋ ˆ๋ฒจ์— ๋Œ€ํ•ด 2๊ฐœ ์ด์ƒ์˜ ์ฐจ๋Ÿ‰์„ ๋ฝ‘์œผ๋ฉด ์ถฉ๋Œ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ์˜ˆ์‹œ๋กœ D / F์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๋”๋ผ๋„ A(1๋ฒˆ ๋„์ฐฉ์ง€์ )์—์„œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ ˆ๋ฒจ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์กฐํ•ฉ์„ ๋ฝ‘์•„๋„ ๋ฌด์กฐ๊ฑด ์ถฉ๋Œ์ด ์ผ์–ด๋‚จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ ˆ๋ฒจ์„ ๊ตฌํ•œ ๋’ค, ๊ฐ ๋ ˆ๋ฒจ์˜ ์ฐจ๋Ÿ‰ ๊ฐœ์ˆ˜ + 1(์•„์˜ˆ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ์ˆ˜) ๋ฅผ ๊ตฌํ•˜๊ณ , ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์€ ๋ชจ๋‘ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ์ „๋ถ€ ๊ณฑํ•ด์ฃผ๋ฉด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

๊ทธ๋ž˜ํ”„ ์ด๋ก ์— ์ค‘์ ์„ ๋‘” ๋ฌธ์ œ์ผ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์• ๋“œํ˜น...? ๊ฐ์„ฑ๋„ ์„ž์—ฌ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊นŠ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ƒ๊ฐํ•˜๊ณ  ๊ทธ๊ฑธ ์ด์šฉํ•ด ๋‹ต์„ ๋„์ถœํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ฐˆํ”ผ๋ฅผ ์žก๊ธฐ ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Copy link
Collaborator

@flydongwoo flydongwoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋„ ์ž๋ ฅ์†”์€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค
๊ณจ๋“œ๋Š” ์—ญ์‹œ ๊ณจ๋“œ๋‹ต๋„ค์š” ,,,

์ผ๋‹จ BFS๋กœ ํ’€์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ฐพ์€ ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค

์ฝ”๋“œ ๊ณต์œ  ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ‘ธ๋А๋ผ ๊ณ ์ƒํ•˜์…จ์–ด์š”~!

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

static const long long MOD = 1000000007LL;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;

    vector<vector<int>> g(N + 1);
    for (int i = 0; i < M; i++) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    vector<int> dist(N + 1, -1);
    queue<int> q;

    dist[1] = 0;
    q.push(1);

    int maxDepth = 0;

    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (size_t i = 0; i < g[u].size(); i++) {
            int v = g[u][i];
            if (dist[v] == -1) {
                dist[v] = dist[u] + 1;
                if (dist[v] > maxDepth) {
                    maxDepth = dist[v];
                }
                q.push(v);
            }
        }
    }

    vector<long long> cnt(maxDepth + 1, 0);
    for (int i = 1; i <= N; i++) {
        if (dist[i] != -1) {
            cnt[dist[i]]++;
        }
    }

    long long ways = 1;
    for (int d = 0; d <= maxDepth; d++) {
        ways = (ways * ((cnt[d] + 1) % MOD)) % MOD;
    }

    ways = (ways - 1 + MOD) % MOD; 
    cout << ways << endl;
    return 0;
}

Copy link
Collaborator

@Seol-Munhyeok Seol-Munhyeok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋ผ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋ผ๋Š” ๋ฐœ์ƒ์ด ์•Œ๊ณ ๋‚˜๋ฉด ๋‹น์—ฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐ๋˜๋Š”๋ฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด ๋ฐœ์ƒ์„ ํ•œ๋‹ค๋Š”๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
์ผ๋‹จ ์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ ๊ฐ™์€ ๊ฒฝ์šฐ

        1
      /
    2
  /
3

์ด๋Ÿฐ ๊ทธ๋ž˜ํ”„๋‹ˆ๊นŒ $2 \times 2 \times 2 - 1$ ํ•ด์„œ 7์ด๋„ค ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ตญ ๊ทธ ์˜๋ฏธ๊ฐ€ ๊ฐ ๋ ˆ๋ฒจ์— ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์”ฉ ์žˆ์œผ๋‹ˆ๊นŒ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜จ ๊ฑฐ๋„ค ํ•˜๊ณ  ๋‚˜์ค‘์— ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ˆ˜ํ•™ ์ง€์‹์€ 'ํ™•๋ฅ ๊ณผ ํ†ต๊ณ„'์—์„œ ๋ฐฐ์šด ์ง€์‹ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ”ํžˆ '์กฐํ•ฉ๋ก '์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์œ ํ˜•๋„ ๋งŽ์ด ํ’€์–ด๋ด์•ผํ•  ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ’€์ด : http://boj.kr/842a576a84e546cc8b274159dedc2a96

์ˆ˜๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค!!!!

@mj010504
Copy link
Collaborator

mj010504 commented Sep 8, 2025

์ €๋„ ์ฒ˜์Œ์— ์กฐํ•ฉ + ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ฏธ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด๋…ผ ๊ฒฐ๊ณผ๋กœ ํ’€๋ ค๋‹ค๊ฐ€ ์•„๋ฌด๋ž˜๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€๋‚  ๊ฒƒ ๊ฐ™์€ ๋А๋‚Œ์ด ๊ฐ•ํ•ด์„œ ํ’€์ด ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œ์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์•„๋ณด์ด๋„ค์š”. ํ’€์ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๊ธฐ ๊นŒ์ง€๊ฐ€ ์–ด๋ ค์šด ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค.
์—ฌ๋‹ด์œผ๋กœ ์ •์  ๊ฐœ์ˆ˜๊ฐ€ 20๋งŒ๊ฐœ๋กœ ๋งŽ์•„์„œ ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋ง๊ณ  2์ฐจ์› ๋ฒกํ„ฐ๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ํ•œ ๋ฒˆ ๋‚ฌ์Šต๋‹ˆ๋‹ค :(

์ฐจ๋Ÿ‰ ๋ฐฐ์น˜
#include <bits/stdc++.h>

using namespace std;

#define N 1000000007

int main() {
    // freopen("input.txt", "rt", stdin);  
    ios::sync_with_stdio(false);  
    cin.tie(0);
    cout.tie(0);
 
    int n, m; cin >> n >> m;
    vector<vector<int>> adj(n);

    for(int i = 0; i < m; i++) {
        int a, b; cin >> a >> b;
        a--; b--;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    vector<bool> visited(n, false);
    visited[0] = true;

    map<int, int> depth;
    depth[0] = 1;

    queue<pair<int, int>> q; q.push({0, 0});
    while(!q.empty()) {
        auto tp = q.front(); q.pop();
        for(auto idx : adj[tp.first]) {
            if(!visited[idx]) {
                visited[idx] = true;
                depth[tp.second + 1] += 1;
                q.push({idx, tp.second + 1});
            }
        }
    }

    long long res = 1;
    for(auto d : depth) {
        res = res * (d.second + 1) % N;
    }

    cout << res - 1;
  

    return 0;
}

@hyeokbini hyeokbini merged commit 6fccbb9 into main Sep 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants