๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw 

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


1. ๋ฌธ์ œ ์š”์•ฝ

์ ์› N๋ช…์ด ํƒ‘์„ ์Œ“์•„์„œ ๋†’์ด๊ฐ€ B ์ด์ƒ์ผ ๋•Œ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋†’์ด๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

2. ํ’€์ด

๋ถ€๋ถ„์ง‘ํ•ฉ ๋ฌธ์ œ์ด๋‹ค.

2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š”

๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ N๋ฒˆ ๋‹ค ๋ดค์„ ๋•Œ ๊ธฐ์ €์กฐ๊ฑด์—์„œ check() ํ•จ์ˆ˜๋กœ

for๋ฌธ์œผ๋กœ ์„ ํƒํ•œ ๋…€์„๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์•„ ํ•ฉ์„ ๊ตฌํ•ด์คฌ๋‹ค. ๊ทธ๋ฆฌ๊ณ  B ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์คฌ๋‹ค.

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์ด ์ผ์–ด๋‚œ๋‹ค.

๊ทธ๋ž˜์„œ ์ˆ˜์ •ํ•œ ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€

์„ ํƒํ•œ ๋…€์„๋“ค๋งŒ์˜ ํ•ฉ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณด๋‚ด์„œ ๋ถ€๋ถ„์ง‘ํ•ฉ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ฒซ ๋ฒˆ์งธ

๋‘ ๋ฒˆ์งธ

๋‘ ๋ฒˆ์งธ๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.

 

3. ์ฝ”๋“œ

์ฒซ ๋ฒˆ์žฌ ๋ฐฉ๋ฒ•

๋”๋ณด๊ธฐ
import java.io.*;
import java.util.*;

public class Solution {

	static int N, B, ans;
	static int[] height;
	static boolean[] isSelected;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc<=T; tc++) {
			st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken());
			B = Integer.parseInt(st.nextToken());
			
			height = new int[N];
			isSelected = new boolean[N];
			
			st = new StringTokenizer(br.readLine());
			for (int i=0; i<N; i++) {
				height[i] = Integer.parseInt(st.nextToken());
			} //์ž…๋ ฅ ๋
			
			ans = Integer.MAX_VALUE;
			subset(0);
			System.out.println("#"+tc+" "+ans);
		}
	}
	
	static void subset(int cnt) {
		if (cnt == N) {
			check();
			return;
		}
		
		isSelected[cnt] = true;
		subset(cnt+1);
		isSelected[cnt] = false;
		subset(cnt+1);
	}
	
	static void check() {
		int sum = 0;
		for (int i=0; i<N; i++) {
			if (isSelected[i] == true) {
				sum += height[i];
			}
		}
		if (sum >= B) {
			ans = Math.min(ans, sum-B);
		}
	}
}

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•

๋”๋ณด๊ธฐ
package a22_11_12;

import java.io.*;
import java.util.*;

public class SW_1486_์žฅํ›ˆ์ด์˜๋†’์€์„ ๋ฐ˜ {

	static int N, B, ans;
	static int[] height;
	static boolean[] isSelected;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc<=T; tc++) {
			st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken());
			B = Integer.parseInt(st.nextToken());
			
			height = new int[N];
			isSelected = new boolean[N];
			
			st = new StringTokenizer(br.readLine());
			for (int i=0; i<N; i++) {
				height[i] = Integer.parseInt(st.nextToken());
			} //์ž…๋ ฅ ๋
			
			ans = Integer.MAX_VALUE;
			subset(0, 0);
			System.out.println("#"+tc+" "+ans);
		}
	}
	
	static void subset(int cnt, int sum) {
		if (sum>=B) ans = Math.min(ans, sum-B);
			
		if (cnt == N) {
			return;
		}
		
		isSelected[cnt] = true;
		subset(cnt+1, sum + height[cnt]);
		isSelected[cnt] = false;
		subset(cnt+1, sum);
	}
}

 

4. ์‚ฌ๋‹ด

๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์ •์„ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค

์‹œํ—˜์— ์ด๋Ÿฐ ๋ฌธ์ œ๋งŒ ๋‚˜์™”์œผ๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ