๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ฝ”ํ…Œ

[BOJ] ๋ฌผํ†ต

by arirang_ 2024. 8. 12.

Link : https://www.acmicpc.net/problem/2251

Level : G5

์œ ํ˜• : dfs, bfs


๐Ÿ“Œ ๋ฌธ์ œ ํƒ์ƒ‰ํ•˜๊ธฐ

A, B, C : ๊ฐ ๋ฌผํ†ต์˜ ๋ถ€ํ”ผ

 

๋ฌผ๋ณ‘์˜ ๋ฌผ์ด ์ฐจ๋Š” ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋Š” 0๋ถ€ํ„ฐ ์ตœ๋Œ€ ์šฉ๋Ÿ‰๊นŒ์ง€์ด๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ๋ถ€ํ”ผ + 1 ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O((A+1)*(B+1)*(C+1))์ด๋‹ค.

 

dfs๋ฅผ ์ด์šฉํ•ด์„œ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

 

๐Ÿ“Œ  ์ฝ”๋“œ ์„ค๊ณ„ํ•˜๊ธฐ

1. ๋ถ€ํ”ผ A, B, C๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. 

2. dfs๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

- ๋ฐฉ๋ฌธํ•œ ๋ฌผ๋ณ‘์„ ์ฒดํฌํ•œ๋‹ค. (๋ฌดํ•œ๋ฃจํ”„ ๋ฐฉ์ง€)

- ๊ฐ€๋Šฅํ•œ ๋ฌผํ†ต์˜ ์–‘์„ result์— ์ €์žฅํ•œ๋‹ค.

- ๋ฌผ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 6๊ฐ€์ง€์— ๋Œ€ํ•ด dfs๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ณ  A์˜ ๋ฌผ์˜ ์–‘์ด 0์ด ๋˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

3. ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

4. ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“Œ ์ •๋‹ต ์ฝ”๋“œ

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

int A, B, C;
set<vector<int>> visited;
vector<int> result;

void dfs(int a, int b, int c) {
    // ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์ƒํƒœ๋ผ๋ฉด return
    if (visited.count({a, b, c})) return;
    
    // ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œ
    visited.insert({a, b, c});
    
    // A๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ C์˜ ์–‘์„ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€
    if (a == 0) result.push_back(c);
    
    // ๋ฌผ์„ ์˜ฎ๊ธฐ๋Š” 6๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ๊ณ ๋ ค
    // A -> B
    dfs(max(0, a - (B - b)), min(B, b + a), c);
    // A -> C
    dfs(max(0, a - (C - c)), b, min(C, c + a));
    // B -> A
    dfs(min(A, a + b), max(0, b - (A - a)), c);
    // B -> C
    dfs(a, max(0, b - (C - c)), min(C, c + b));
    // C -> A
    dfs(min(A, a + c), b, max(0, c - (A - a)));
    // C -> B
    dfs(a, min(B, b + c), max(0, c - (B - b)));
}

int main() {
    cin >> A >> B >> C;
    
    dfs(0, 0, C);
    
    sort(result.begin(), result.end());
    result.erase(unique(result.begin(), result.end()), result.end());
    
    for (int x : result) {
        cout << x << " ";
    }
    
    return 0;
}

'์ฝ”ํ…Œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ๋ณ„ ์ฐ๊ธฐ  (0) 2024.12.15
[BOJ] ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ  (0) 2024.08.11
[BOJ] ์ˆซ์žํŒ ์ ํ”„  (0) 2024.08.07
[BOJ] ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ  (1) 2024.08.06
[BOJ] ๋‘ ์Šคํ‹ฐ์ปค  (0) 2024.08.05