지구정복

[브루트포스, 백트래킹] 백준 - N과 M (7) 본문

데이터 엔지니어링 정복/Algorithm

[브루트포스, 백트래킹] 백준 - N과 M (7)

eeaarrtthh 2021. 8. 31. 19:48
728x90
반응형

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

 

15656번: N과 M (7)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

 

-문제해설

기존 문제와 같다... 그냥 정렬만 해주면 된다.!

 

 

-자바

package bruteforce;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BJ15656 {
	static int n, m;
	static int[] arr, ans;
	static StringBuilder sb = new StringBuilder();
	
	public static void dfs( int depth ) {
		if( depth == m ) {
			for( int val : ans ) sb.append( val ).append( " " );
			sb.append( "\n" );
			return;
		}
		
		for( int i=0; i<n; i++ ) {
			ans[depth] = arr[i];
			dfs( i, depth+1 );
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer( br.readLine() );
		n = Integer.parseInt( st.nextToken() );
		m = Integer.parseInt( st.nextToken() );
		
		arr = new int[n];
		ans = new int[m];
		st = new StringTokenizer( br.readLine() );
		for( int i=0; i<n; i++ ) arr[i] = Integer.parseInt( st.nextToken() );
		Arrays.sort( arr );
		
		dfs( 0 );
		
		System.out.println( sb );
	}
}

 

-파이썬

from sys import stdin

def dfs( depth ):
    global n, m, arr, ans
    if depth == m:
        print( ' '.join( map(str, ans) ) )
        return
    
    for i in range( 0, n ):
        ans[depth] = arr[i]
        dfs( depth+1 )
        

input = stdin.readline
n, m = map(int, input().split())
arr = list( map(int, input().split()) )
ans = [0] * m
arr.sort()
dfs( 0 )
728x90
반응형
Comments