본문 바로가기
Algorithm/백준

15654 N과M (5) (C++)

by IT learning 2021. 4. 25.
728x90

아 점점 손에 익어간다 진짜로... 어떻게 구동 되는지 보인다..

 

거두절미하고. 이 문제는 기존에 입력이 N개의 자연수 중에서 M개의 수열을 출력하는 것이었다면, 이건 수열을 직접 골라서 출력해야 한다. 그리고 그냥 수열을 나열하는게 아니라, 사전 순으로 증가하는 순서로 출력까지.

 

근데 이건 생각보다 간단하다. 그냥 입력을 받을 board[] 배열 하나, 받은 입력을 순열로 표현할 arr[] 배열. 그리고 방문의 여부를 확인해주는 isused[] 배열을 이용하면 끝이다.

 

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'

int n,m;
int board[10];
int arr[10];
int isused[10];

void func(int k) {
    if(k == m) {
		 for(int i = 0; i < m; i++) {
            cout << arr[i] << ' ';
        }
        cout << endl;
        return; // 리턴을 해서 바로 윗 단계로 올라감
	}
	
	for(int i = 0; i < n; i++) {
        if(!isused[i]) { // 아직 사용되지 않은 경우
            arr[k] = board[i];
            isused[i] = 1;
            func(k+1);
	    isused[i] = 0;
        }
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
	
	for(int i = 0; i < n; i++) {
		cin >> board[i];
	}
	sort(board,board+n);
    func(0);
	
}

 

그냥 for문에서 i값을 넣었던 과거와는 달리 board[]의 값을 넣어준다. 단, 넣어주는 배열이 순열을 표현할 새로운 배열이어야 한다. 그 이외에 것은 원래의 문제와 같다. 이 문제도 어렵지 않게 풀었다.

728x90

'Algorithm > 백준' 카테고리의 다른 글

6593 상범 빌딩 (C++)  (0) 2021.04.28
15656 N과M (7) (C++)  (0) 2021.04.26
15652 N과M (4) (C++)  (0) 2021.04.25
15651 N과 M(3) (C++)  (0) 2021.04.25
7562 나이트의 이동 (C++)  (0) 2021.04.25

댓글

IT_learning's Commit