https://www.acmicpc.net/problem/2961

 

2961๋ฒˆ: ๋„์˜์ด๊ฐ€ ๋งŒ๋“  ๋ง›์žˆ๋Š” ์Œ์‹

์ฒซ์งธ ์ค„์— ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ทธ ์žฌ๋ฃŒ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์žฌ๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, ๊ทธ ์š”๋ฆฌ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์€

www.acmicpc.net

 

 

 

 

 

๋ฐฐ๋‚ญ ๋ฌธ์ œ ์œ ํ˜•์ด๋‹ค. ๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ๋ถ€๋ถ„์ง‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 ์‹ ๋ง›๊ณผ ์“ด๋ง›์€ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์Œ์‹์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์„ ๋…๊ฒจ์ค˜ ๋ˆ„์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

์Œ์‹์„ ๋„ฃ์—ˆ์„ ๋•Œ์™€ ์•ˆ๋„ฃ์—ˆ์„ ๊ฒฝ์šฐ. ๋‘ ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ์žฌ๊ท€๋กœ ๋Œ๋ฆฌ๋„๋ก ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ N๋ฒˆ์„ ๋‹ค ํƒ์ƒ‰ํ•˜๋ฉด ์ฐจ์ด๋ฅผ ๊ตฌํ•ด ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด๋•Œ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•ด์•ผ ํ•œ๋‹ค.

 

๊ธœ๊ณ  ๋˜ ์ฃผ์˜ํ•  ์ ์€ ์“ด๋ง›์€ ๊ณฑํ•˜๊ธฐ๋ฅผ ํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ๊ฐ’์ด 0 ์•„๋‹ˆ๋ผ 1๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

์ฝ”๋“œ

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

public class Main {
	static int N;
	static int[][] dish;
	static int min = 1000000000;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		
		dish = new int[N][2]; //์‹ ๋ง›, ์“ด๋ง›
		
		for(int i =0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			dish[i][0] = Integer.parseInt(st.nextToken());
			dish[i][1] = Integer.parseInt(st.nextToken());
		}
		
		subset(0, 1, 0); //์“ด ๋ง›์€ ๊ณฑํ•˜๊ธฐ๋ผ์„œ 1๋กœ ์ดˆ๊ธฐ๊ฐ’ ํ•ด์•ผํ•จ
		
		System.out.println(min);

	}

	public static void subset(int depth, int sour, int bitter) {
		if(depth == N) {
			if(sour != 1 && bitter != 0) { //์•„๋ฌด๊ฒƒ๋„ ์‚ฌ์šฉ ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์™ธ
				int d = Math.abs(sour - bitter);
				min = Math.min(min, d);
			}
			
			return;
		}
		
		subset(depth + 1, sour * dish[depth][0], bitter + dish[depth][1]);
		subset(depth + 1, sour, bitter);
	}

}

 

 

 

 

 

 

๊ฒฐ๊ณผ

giraffe_