๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 18429_๊ทผ์†์‹ค

๋ฟŒ์•ผ._. 2023. 11. 21. 10:25

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/18429)

< ๊ทผ์†์‹ค >

 

๋ฌธ์ œ ํ’€์ด 

 

์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค. ํ™•์ธํ•˜๋ฉด์„œ 500 ๋ฏธ๋งŒ์ด ๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์กฐํ•ฉ์„ ํ™•์ธํ•œ๋‹ค.

 

 my solution (Java)

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

public class _18429_ { // ๊ทผ์†์‹ค
	static int arr[], answer;
	static boolean visited[];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		arr = new int[n];
		visited = new boolean[n];
		answer = 0;

		st = new StringTokenizer(bf.readLine());
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		search(0, n, k, 500);

		System.out.println(answer);
	}

	private static void search(int idx, int n, int k, int w) {
		if (idx == n) {
			answer += 1;
			return;
		}
		for (int i = 0; i < n; i++) {
			if (!visited[i]) {
				if (w + arr[i] - k < 500) {
					continue;
				}
				visited[i] = true;
				search(idx + 1, n, k, w + arr[i] - k);
				visited[i] = false;
			}
		}
	}
}

 

๋ณ€์ˆ˜)
n, k : ์šด๋™ ํ‚คํŠธ ์ˆ˜, ๊ฐ์†Œํ•˜๋Š” ์ค‘๋Ÿ‰
arr : ์šด๋™ ํ‚คํŠธ ์ค‘๋Ÿ‰ ์ฆ๊ฐ€๋Ÿ‰
visited : ์กฐํ•ฉ์—์„œ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
answer : ํ•ญ์ƒ ์ค‘๋Ÿ‰์ด 500 ์ด์ƒ์ด ๋˜๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 

 

์šด๋™ ํ‚คํŠธ ์ค‘๋Ÿ‰ ์ฆ๊ฐ€๋Ÿ‰์„ n์ผ ๋™์•ˆ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ ์šฉํ• ์ง€ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋Š ์ˆœ๊ฐ„ ์ค‘๋Ÿ‰์ด 500๋ณด๋‹ค ์ž‘์•„์ง€๋ฉด ์ •๋‹ต์ด ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ ์กฐํ•ฉ์„ ํ™•์ธํ•œ๋‹ค. n์ผ ๋™์•ˆ ํ•ญ์ƒ 500 ์ด์ƒ์„ ์œ ์ง€ํ•œ๋‹ค๋ฉด answer +1์„ ํ•ด์ค€๋‹ค.