728x90
재귀에서 ptotal값도 visited처럼 되돌려야하는데 안했다. 저렇게 주석처리한것처럼 처리하면 또 잘된다...너무어렵넹
import java.io.*;
import java.util.*;
public class Main {
public static int ncount = 0;
/* output setting */
// static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
/* input reader */
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/* input tokenizer */
StringTokenizer st = new StringTokenizer(br.readLine());
/* parsing start */
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] array = new int[n];
for (int ii = 0; ii < n; ii++)
array[ii] = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[n];
/* parsing end */
permutation(visited, array, 500, 0, k);
System.out.println(ncount);
// System.out.println(sb);
br.close();
}
static void permutation(boolean visited[], int[] array, int ptotal, int depth, int pk) {
if (ptotal < 500)
return;
else if (ptotal >= 500 && depth == array.length) {
ncount++;
return;
}
for (int ii = 0; ii < array.length; ii++) {
if (visited[ii] == false) {
visited[ii] = true;
ptotal = ptotal + array[ii] - pk;
permutation(visited, array, ptotal, depth + 1, pk);
//permutation(visited, array, ptotal + array[ii] - pk, depth + 1, pk);
ptotal = ptotal - (array[ii] - pk);
visited[ii] = false;
}
}
}
}
728x90
'코딩 테스트' 카테고리의 다른 글
백준 15740번 A+B - 9(자바,java,JAVA) (0) | 2023.01.11 |
---|---|
백준 1260번 DFS와 BFS(자바,java,JAVA) (0) | 2023.01.11 |
백준 1406번 에디터(자바,java,JAVA) (0) | 2023.01.11 |
2577번 숫자의 개수(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |
1475번 방번호(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |