๐Ÿ’ญ Problem Solving

[BOJ][C++] ๋ฐฑ์ค€ 15649๋ฒˆ: N๊ณผ M (1)

0=2. 2024. 10. 28. 15:30

๋ฌธ์ œ

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

 

๋ฌธ์ œ ์ดํ•ด

  • 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ ์ค‘๋ณต ์—†์ด M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

๐Ÿ’กDFS๋ฅผ ์ด์šฉํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น

    1๋ถ€ํ„ฐ N๊นŒ์ง€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํƒ์ƒ‰ํ•˜๋ฉฐ ์ค‘๋ณต ์—†์ด M๊ฐœ์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.

  1. ์ข…๋ฃŒ ์กฐ๊ฑด
    : M๊ฐœ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์„ ํƒํ–ˆ์„ ๋•Œ
  2. ํƒ์ƒ‰
    - 1๋ถ€ํ„ฐ N๊นŒ์ง€ ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    - ์ˆ˜๋ฅผ ์ค‘๋ณตํ•ด์„œ ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ๋ฌธ ํ‘œ๊ธฐํ•œ๋‹ค.
    - ํƒ์ƒ‰ํ•œ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•  ๋ฐฐ์—ด์— ์‚ฝ์ž…ํ•œ๋‹ค.
    - ํƒ์ƒ‰์ด ๋๋‚œ ์ˆ˜๋ฅผ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ˆ˜๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.
  3. ํƒ์ƒ‰ ์ข…๋ฃŒ
    - ์„ ํƒํ•œ M๊ฐœ์˜ ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ์ถœ๋ ฅ ํ›„ ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

์ฝ”๋“œ

#include<iostream>
#include<vector>

using namespace std;

int N, M;
vector<int> v;
vector<bool> visited;

void dfs(int cur) {
    // ์ข…๋ฃŒ ์กฐ๊ฑด: M๊ฐœ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•จ
    if (cur == M) {
        for (int i: v)
            cout << i << ' ';
        cout << '\n';
        return;
    }

    for (int i = 1; i <= N; i++) {
        if (!visited[i]) {
            visited[i] = true;
            v.push_back(i);

            dfs(cur + 1);

            visited[i] = false;
            v.pop_back();
        }
    }
}

int main() {
    cin >> N >> M;
    visited.assign(N + 1, false);

    dfs(0);

    return 0;
}