SWLUG/๋ฐฑ์ค€ BEAKJOON

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

waterproof 2023. 11. 15. 06:55

 

 

 

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

 

15649๋ฒˆ: N๊ณผ M (1)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 

 


[1] ๋ฌธ์ œ

 

๋ฌธ์ œ

์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ธธ์ด๊ฐ€ M์ธ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

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

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ N ≤ 8)

์ถœ๋ ฅ

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 

3 1

 

์˜ˆ์ œ ์ถœ๋ ฅ 1 

1
2
3

 

์˜ˆ์ œ ์ž…๋ ฅ 2 

4 2

 

์˜ˆ์ œ ์ถœ๋ ฅ 2 
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

 

์˜ˆ์ œ ์ž…๋ ฅ 3 
4 4

 

์˜ˆ์ œ ์ถœ๋ ฅ 3 
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

 

 


[2] ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋‹ต_์˜ค๋‹ต

 

#include <stdio.h>

int main() {
    int N, M;
    scanf("%d %d", &N, &M);

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            if (i == j) continue; // ์ค‘๋ณต ์ œ๊ฑฐ

            for (int k = 1; k <= N; k++) {
                if (i == k || j == k) continue; // ์ค‘๋ณต ์ œ๊ฑฐ
                printf("%d %d %d\n", i, j, k);
            }
        }
    }

    return 0;
}

 

 

์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ์กฐ๊ฑด ์ค‘ "์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค"๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค.

ํ˜„์žฌ์˜ ์ฝ”๋“œ์—์„œ๋Š” ์ˆœ์„œ๋ฅผ ์ œ๋Œ€๋กœ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ถœ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค.

 

 


[3] ์ •๋‹ต

 

#include <stdio.h>

void printSequence(int arr[], int M) {
    for (int i = 0; i < M; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

void generateSequence(int N, int M, int depth, int arr[]) {
    if (depth == M) {
        printSequence(arr, M);
        return;
    }

    for (int i = 1; i <= N; i++) {
        int isAlreadySelected = 0;
        for (int j = 0; j < depth; j++) {
            if (arr[j] == i) {
                isAlreadySelected = 1;
                break;
            }
        }

        if (!isAlreadySelected) {
            arr[depth] = i;
            generateSequence(N, M, depth + 1, arr);
        }
    }
}

int main() {
    int N, M;
    scanf("%d %d", &N, &M);

    int arr[8];  // M์˜ ์ตœ๋Œ“๊ฐ’์ด 8์ด๋ฏ€๋กœ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ 8๋กœ ์ง€์ •
    generateSequence(N, M, 0, arr);

    return 0;
}

 

 

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

๊ฐ ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜ printSequence์™€ ์ˆ˜์—ด์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜ generateSequence๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑ๋˜์—ˆ๋‹ค

 


[3] ๋Š๋‚€ ์ 

 

์–ด๋ ค์› ์ง€๋งŒ, ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.

๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒฝํ—˜์ด์—ˆ๋‹ค.