danbibibi
article thumbnail
Published 2023. 1. 15. 02:49
BOJ 15663번: N과 M (9) 문제 풀이/백준

문제

문제 바로가기> BOJ 15663번: N과 M (9)

 

15663번: N과 M (9)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

풀이

같은 위치에 같은 수가 오게되면, 중복 수열이 되므로, 이를 방지하기 위해 `prev` 를 이용해서 같은 자리에 같은 수가 오지 못하도록 해주었다!

 

#include<iostream>
#include<algorithm>
#define MAX 10
using namespace std;

int N, M;
bool isused[MAX];
int num[MAX], ans[MAX];

void input() {
    cin >> N >> M;
    for (int i = 0; i < N; i++) cin >> num[i];
    sort(num, num + N);
}

void solution(int cnt) {
    if (cnt == M) {
        for (int i = 0; i < M; i++) cout << ans[i] << " ";
        cout << "\n";
        return;
    }

    int prev = -1; // 중복 수열 방지
    for (int i = 0; i < N; i++) {
        if(isused[i] || num[i] == prev) continue;
        isused[i] = true;
        ans[cnt] = num[i];
        prev = num[i];
        solution(cnt + 1);
        isused[i] = false;
    }
}

int main() {
    input();
    solution(0);
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 17406번: 배열 돌리기 4  (0) 2023.01.19
BOJ 2206번: 벽 부수고 이동하기  (0) 2023.01.18
BOJ 2573번: 빙산  (0) 2022.12.31
BOJ 11057번: 오르막 수  (0) 2022.12.30
BOJ 5014번: 스타트링크  (1) 2022.12.28
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로