본문 바로가기

알고리즘/백준 (JAVA)

백준 2961 도영이가 만든 맛있는 음식 / java 자바

www.acmicpc.net/problem/2961

2961번: 도영이가 만든 맛있는 음식

첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은

www.acmicpc.net

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

public class Main {
	static int N, min = Integer.MAX_VALUE;
	static boolean[] ck;
	static ArrayList<Integer> S = new ArrayList<>();
	static ArrayList<Integer> B = new ArrayList<>();
	
	static void sol(int cnt, int as, int s, int b) {
		if (cnt >= 1) {
			min = Math.min(Math.abs(s - b), min);			
		}
		for (int i = as; i < N; i++) {
			if (ck[i]) continue;
			ck[i] = true;
			sol(cnt + 1, i, s * S.get(i), b + B.get(i));
			ck[i] = false;
		}
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		ck = new boolean[N];
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			S.add(Integer.parseInt(st.nextToken()));
			B.add(Integer.parseInt(st.nextToken()));
		}
		sol(0, 0, 1, 0);
		System.out.println(min);
	}
}