알고리즘/JA

1127 : 맛있는 음식(PERKET)

  • -
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=407&sca=40

 

JUNGOL | 맛있는 음식(PERKET) > 문제은행

제한시간: 1000 ms    메모리제한: 64 MB 해결횟수: 308 회    시도횟수: 639 회    "퍼킷"은 널리 알려진 맛있는 음식이다.  퍼킷이 맛있는 음식으로 전통을 유지할 수 있던 이유는 요리사들이 "퍼킷"의 맛을 위해 재료를 고르는데 있어 신중했기 때문이다. 여러분에게 N개의 재료가 주어진다. S는 신맛을 B는 쓴맛을 뜻한다고 하자.  다양한 재료가 쓰인다고 할 때, 신맛의 합은 우리가 선택한 각 신맛재료의 신맛 지수들을 곱한 값이고 

www.jungol.co.kr

재료가 조합될 수 있는 모든 경우의 수를 완탐해보고 최소값을 구해보면 된다.

재료의 조합을 구할 때는 전체 요소를 이용한 부분집합 만드는 방법을 이용해보자.

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**************************************************************
 * Problem: 1127
 * User: itsmeyjc
 * Language: Java
 * Result: Success
 * Time:99 ms
 * Memory:8776 kb
 * http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=407&sca=40
 ****************************************************************/
public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		br = new BufferedReader(new StringReader(Main.src));
		int n = Integer.parseInt(br.readLine());
		List<int[]> materials = new ArrayList<>();
		StringTokenizer tokens = null;
		for (int i = 0; i < n; i++) {
			tokens = new StringTokenizer(br.readLine());
			materials.add(new int[] { Integer.parseInt(tokens.nextToken()), Integer.parseInt(tokens.nextToken()) });
		}
		int answer = Integer.MAX_VALUE;
		List<Integer> subset = null;
		for (int i = 1; i < (1 << n); i++) {
			int sumS = 1;
			int sumB = 0;

			subset = new ArrayList<>();
			// subset 준비 완료
			for (int j = 0; j < n; j++) {
				if ((i & (1 << j)) > 0) {
					subset.add(j);
				}
			}
			//System.out.println("subset: " + subset);
			// subset 내용으로 맛 계산
			for (int j = 0; j < subset.size(); j++) {
				int[] sub = materials.get(subset.get(j));
				//System.out.println("재료 구성: " + Arrays.toString(sub));
				sumS *= sub[0];
				sumB += sub[1];
			}
			int result = Math.abs(sumS - sumB);
			//System.out.println(result);
			if (result == 0) {
				answer = 0;
				break;
			} else {
				if (answer > result) {
					answer = result;
				}
			}
		}
		System.out.println(answer);
	}

	static String src = "4\r\n" +
						"1 7\r\n" +
						"2 6\r\n" +
						"3 8\r\n" +
						"4 9";

}
반응형

'알고리즘 > JA' 카테고리의 다른 글

1733 : 오목  (0) 2019.08.08
1809 : 탑  (0) 2019.08.08
1681 : 해밀턴 순환회로  (0) 2019.07.28
[솔루션]정올 1810 백설공주  (0) 2019.07.23
[솔루션]정올 1169 주사위 던지기 1  (0) 2018.10.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.