[C++] ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

2023. 9. 13. 17:22ยท๐Ÿ“ Computer Science/โœ Algorithm

์ด๋ถ„ ๊ทธ๋ž˜ํ”„

1. ๊ฐœ๋…

์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋ž€ ์ธ์ ‘ํ•œ ์ •์ ๋ผ๋ฆฌ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•˜์—ฌ ๋ชจ๋“  ์ •์ ์„ ๋‘ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน์˜ ์ •์ ์„ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.

 

์ด๋ถ„ ๊ทธ๋ž˜ํ”„

 

2. ์ด๋ถ„ ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด๋ถ„ ๋งค์นญ์ด๋ž€ ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์—์„œ ํ•œ์ชฝ ๊ทธ๋ฃน(A)๊ณผ ๋‹ค๋ฅธ ํ•œ์ชฝ ๊ทธ๋ฃน(1)์ด ๋งค์นญ์„ ํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ ์œ ๋Ÿ‰์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค.

 

์ด๋ถ„ ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

3. ๋ฌธ์ œ

https://www.acmicpc.net/problem/1707

 

1707๋ฒˆ: ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์—

www.acmicpc.net

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

#define RED 1
#define BLUE 2

vector<int> vect[20001];
int visited[20001];
int V, E;

void DFS(int start)
{
    // ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•œ ์ ์ด๋ฉด RED
    if (visited[start] == 0)
        visited[start] = RED;

    for (int i = 0; i < vect[start].size(); i++)
    {
        int idx = vect[start][i];
        if (visited[idx] == 0) // ์—ฐ๊ฒฐ๋œ ์  ์ค‘ ๋ฐฉ๋ฌธ ์•ˆํ•œ ์ ์ด๋ฉด
        {
            visited[idx] = visited[start] == RED ? BLUE : RED; // ๋ฐ˜๋Œ€ ์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ
            DFS(idx);
        }
    }
}

void BFS(int start)
{
    // ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•œ ์ ์ด๋ฉด RED
    visited[start] = RED;
    queue<int> q;
    q.push(start);

    while (q.size() != 0)
    {
        int now = q.front();
        q.pop();
        for (int i = 0; i < vect[now].size(); i++)
        {
            int idx = vect[now][i];
            if (visited[idx] == 0) // ์—ฐ๊ฒฐ๋œ ์  ์ค‘ ๋ฐฉ๋ฌธ ์•ˆํ•œ ์ ์ด๋ฉด
            {
                visited[idx] = visited[now] == RED ? BLUE : RED; // ๋ฐ˜๋Œ€ ์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ
                q.push(idx);
            }
        }
    }
}

int check()
{
    for (int i = 1; i <= V; i++)
    {
        for (int j = 0; j < vect[i].size(); j++)
        {
            int idx = vect[i][j];
            if (visited[i] == visited[idx])
                return false; // ์ธ์ ‘ํ•œ ๋…ธ๋“œ์™€ ์ƒ‰์ด ๊ฐ™์œผ๋ฉด ์ด๋ถ„๊ทธ๋ž˜ํ”„ ์•„๋‹˜
        }
    }

    return true;
}

int main()
{
    int T;
    int u, v;

    cin >> T;
    while (T--)
    {
        cin >> V >> E;
        for (int i = 0; i < E; i++)
        {
            cin >> u >> v;
            vect[u].push_back(v);
            vect[v].push_back(u);
        }

        // ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ •์  ๋‹ค ๋ฐฉ๋ฌธ
        for (int i = 1; i <= V; i++)
            if (visited[i] == 0)
                BFS(i);

        if (check() == 0)
            cout << "NO\n";
        else
            cout << "YES\n";

        memset(visited, 0, sizeof(visited));
        memset(vect, 0, sizeof(vect));
    }
}

 

https://www.acmicpc.net/problem/11375

 

11375๋ฒˆ: ์—ดํ˜ˆ๊ฐ•ํ˜ธ

๊ฐ•ํ˜ธ๋„ค ํšŒ์‚ฌ์—๋Š” ์ง์›์ด N๋ช…์ด ์žˆ๊ณ , ํ•ด์•ผํ•  ์ผ์ด M๊ฐœ๊ฐ€ ์žˆ๋‹ค. ์ง์›์€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๊ณ , ์ผ์€ 1๋ฒˆ๋ถ€ํ„ฐ M๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. ๊ฐ ์ง์›์€ ํ•œ ๊ฐœ์˜ ์ผ๋งŒ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ์ผ์„ ๋‹ด๋‹นํ•˜๋Š” ์‚ฌ๋žŒ์€ 1๋ช…์ด์–ด์•ผ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ง์›์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์˜ ๋ชฉ๋ก์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, M๊ฐœ์˜ ์ผ ์ค‘์—์„œ ์ตœ๋Œ€ ๋ช‡ ๊ฐœ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

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

vector<int> work[1001];
int staff[1001];
bool ck[1001];

bool dfs(int index)
{
	if (ck[index])
		return false;
	ck[index] = true;

	for (auto i : work[index])
		if (!staff[i] || dfs(staff[i])) {
			staff[i] = index;
			return true;
		}
	return false;
}

int main()
{
	int N, M;
	cin >> N >> M;
	for (int i = 1, A, B; i <= N; ++i) {
		cin >> A;
		while (A--) {
			cin >> B;
			work[i].push_back(B);
		}
	}

	int ans = 0;
	for (int i = 1; i <= N; ++i) {
		fill(ck, ck + N, false);
		if (dfs(i))
			++ans;
	}
	cout << ans;
}

 

์ฐธ๊ณ 

https://velog.io/@matcha_/%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84%EA%B7%B8%EB%9E%98%ED%94%84-C-BFS-DFS

 

[๋ฐฑ์ค€] 1707 ์ด๋ถ„๊ทธ๋ž˜ํ”„ C++ (BFS, DFS)

๐Ÿ“Œ๋ฐฑ์ค€ 1707 ์ด๋ถ„๊ทธ๋ž˜ํ”„https://www.acmicpc.net/problem/1707์ €๋ฒˆ์— ์ธ์ ‘ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•ด๋ดค์œผ๋‹ˆ ์ด๋ฒˆ์—” ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.์ด๋ฒˆ์—” visited์— ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ 1 ๋ง๊ณ  ์ƒ‰๊น”์„ ๋„ฃ์„ ๊ฒƒ์ด๋‹ค. ๋นจ๊ฐ„์ƒ‰์ด๋ฉด RE

velog.io

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Computer Science/โœ Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] Palindrome
  • [C++] ํŽธ์ง‘ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Edit Distance Algorithm)
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ
  • [C++] ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[C++] ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”