본문 바로가기
코딩 테스트

백준 18429번 근손실(자바,java,JAVA)

by 주용사 2023. 1. 11.
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