[Algorithm] ๐Ÿƒ๋ฐฑ์ค€ 2798 ๋ธ”๋ž™์žญ

HaJingJingยท2021๋…„ 3์›” 30์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
6/119
post-thumbnail

0. ๋ฌธ์ œ

์นด์ง€๋…ธ์—์„œ ์ œ์ผ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒŒ์ž„ ๋ธ”๋ž™์žญ์˜ ๊ทœ์น™์€ ์ƒ๋‹นํžˆ ์‰ฝ๋‹ค. ์นด๋“œ์˜ ํ•ฉ์ด 21์„ ๋„˜์ง€ ์•Š๋Š” ํ•œ๋„ ๋‚ด์—์„œ, ์นด๋“œ์˜ ํ•ฉ์„ ์ตœ๋Œ€ํ•œ ํฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒŒ์ž„์ด๋‹ค. ๋ธ”๋ž™์žญ์€ ์นด์ง€๋…ธ๋งˆ๋‹ค ๋‹ค์–‘ํ•œ ๊ทœ์ •์ด ์žˆ๋‹ค.
ํ•œ๊ตญ ์ตœ๊ณ ์˜ ๋ธ”๋ž™์žญ ๊ณ ์ˆ˜ ๊น€์ •์ธ์€ ์ƒˆ๋กœ์šด ๋ธ”๋ž™์žญ ๊ทœ์น™์„ ๋งŒ๋“ค์–ด ์ƒ๊ทผ, ์ฐฝ์˜์ด์™€ ๊ฒŒ์ž„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
๊น€์ •์ธ ๋ฒ„์ „์˜ ๋ธ”๋ž™์žญ์—์„œ ๊ฐ ์นด๋“œ์—๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ๋‹ค. ๊ทธ ๋‹ค์Œ, ๋”œ๋Ÿฌ๋Š” N์žฅ์˜ ์นด๋“œ๋ฅผ ๋ชจ๋‘ ์ˆซ์ž๊ฐ€ ๋ณด์ด๋„๋ก ๋ฐ”๋‹ฅ์— ๋†“๋Š”๋‹ค. ๊ทธ๋Ÿฐ ํ›„์— ๋”œ๋Ÿฌ๋Š” ์ˆซ์ž M์„ ํฌ๊ฒŒ ์™ธ์นœ๋‹ค.
์ด์ œ ํ”Œ๋ ˆ์ด์–ด๋Š” ์ œํ•œ๋œ ์‹œ๊ฐ„ ์•ˆ์— N์žฅ์˜ ์นด๋“œ ์ค‘์—์„œ 3์žฅ์˜ ์นด๋“œ๋ฅผ ๊ณจ๋ผ์•ผ ํ•œ๋‹ค. ๋ธ”๋ž™์žญ ๋ณ€ํ˜• ๊ฒŒ์ž„์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณ ๋ฅธ ์นด๋“œ์˜ ํ•ฉ์€ M์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ M๊ณผ ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
N์žฅ์˜ ์นด๋“œ์— ์จ์ ธ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, M์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ M์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์นด๋“œ 3์žฅ์˜ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(3 โ‰ค N โ‰ค 100)๊ณผ M(10 โ‰ค M โ‰ค 300,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์นด๋“œ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.
ํ•ฉ์ด M์„ ๋„˜์ง€ ์•Š๋Š” ์นด๋“œ 3์žฅ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— M์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ M์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์นด๋“œ 3์žฅ์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

1. ๋ฌธ์ œ ๊ฐ„๋‹จ ํ•ด์„

N๊ฐœ์˜ ์นด๋“œ ์ค‘ 3๊ฐœ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด๋ฅผ ํ•ฉ์ณ์„œ M์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•ด๋ผ

2. ์•„์ด๋””์–ด

3๊ฐœ์˜ ์นด๋“œ๋ฅผ ๋”ํ•ด์„œ M๋ณด๋‹ค๋Š” ์ž‘์œผ๋ฉด์„œ ์ œ์ผ ํฐ ๊ฐ’ ๊ตฌํ•˜๊ธฐ
์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ์™„์ „ํƒ์ƒ‰ (dfs)

3. ํ•ต์‹ฌ ํ’€์ด

1) 3๊ฐœ์˜ ์นด๋“œ๋ฅผ ๋”ํ•ด์„œ M๋ณด๋‹ค๋Š” ์ž‘์œผ๋ฉด์„œ ์ œ์ผ ํฐ ๊ฐ’ ๊ตฌํ•˜๊ธฐ

ret = Math.max(ret, check());
// check() ํ•จ์ˆ˜๋Š” M๋ณด๋‹ค ์ž‘์€ ํ•ฉ ๋ฐ˜ํ™˜ 
// M๋ณด๋‹ค ํฌ๋ฉด -1๋ฐ˜ํ™˜

2) ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰

result[i] = true;
dfs(depth+1, i+1);
result[i] = false;

4. ์ฝ”๋“œ

import java.util.Scanner;

public class BOJ_2798 {
	static int N,M, arr[];
	static boolean result[];
	static int ret = 0;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		M = sc.nextInt();
		
		arr = new int[N];
		result = new boolean[N];

		for(int i=0; i<N; i++)
			arr[i] = sc.nextInt();
		
		dfs(0,0);
		
		System.out.println(ret);
	}
	
	public static void dfs(int depth, int start) {
		if(depth == 3) {
			ret = Math.max(ret, check());
			return;
		}
		
		for(int i=start; i<N; i++) {
			result[i] = true;
			dfs(depth+1, i+1);
			result[i] = false;
		}
	}
	
	public static int check() {
		int sum = 0;
		
		for(int i=0; i<N; i++) {
			if(result[i])
				sum+=arr[i];
		}
		
		if(sum > M)
			return -1;
		else
			return sum;
	}
}

5. ๊ฒฐ๊ณผ

์„ฑ๊ณต~

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€