반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[브루트포스, 백트리킹] 백준 - N과 M (5) 본문
728x90
반응형
https://www.acmicpc.net/problem/15654
-문제해설
dfs를 이용해야 하고 방문함수를 사용해서 이전 깊이에서 방문한 수는 건너뛰도록 해야한다.
그리고 다시 이전 깊이로 돌아오면(백트래킹) 방문함수를 다시 미방문 처리해줘야 한다.
n과 m(1) 문제와 비슷하니 참고..!
다른 점은 사용될 숫자를 입력받고 정렬을 해야 된다는 점이다.
-자바
package bruteforce;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BJ15654 {
static int[] arr, ans, visit;
static int n,m;
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++ ) {
if( visit[i] != 1 ) {
ans[depth] = arr[i];
visit[i] = 1;
dfs( depth+1 );
visit[i] = 0;
}
}
}
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];
visit = new int[n];
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 ):
if visit[i]:
continue
else:
ans[depth] = arr[i]
visit[i] = True
dfs( depth+1 )
visit[i] = False
input = stdin.readline
n, m = map( int, input().split() )
ans = [0] * m
visit = [False] * n
arr = list( map(int, input().split()) )
arr.sort()
dfs( 0 )
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[브루트포스, 백트래킹] 백준 - N과 M (7) (0) | 2021.08.31 |
---|---|
[브루트포스, 백트래킹] 백준 - N과 M (6) (0) | 2021.08.31 |
[브루트포스, 백트래킹] 백준 - N과 M (4) (0) | 2021.08.31 |
[브루트포스, 백트리킹] 백준 - N과 M (3) (0) | 2021.08.30 |
[브루트포스, 백트리킹] 백준 - N과 M (1) (0) | 2021.08.30 |
Comments