계단을 오르듯이

20950. 미술가 미미 본문

알고리즘/백준_JAVA

20950. 미술가 미미

happyAyun 2022. 1. 5. 23:40
  • 문제를 잘 읽자!!! => 7개까지가 색 혼합의 최대
  • 조합으로 풀었고, 혼합이 최대 7개 까지이므로 조건절로 7개 이상이 되면 return해서 빠져나오게 했다.
package january.first;

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

public class B_20950_미술가미미 {

	static int Min = Integer.MAX_VALUE;
	static int R, B, G;

	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(in.readLine());
		List<Color> list = new ArrayList<>();
		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(in.readLine(), " ");
			int r = Integer.parseInt(st.nextToken());
			int g = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			list.add(new Color(r, g, b));
		}
		StringTokenizer st = new StringTokenizer(in.readLine(), " ");
		R = Integer.parseInt(st.nextToken());
		G = Integer.parseInt(st.nextToken());
		B = Integer.parseInt(st.nextToken());

		comb(0, 0, N, list, 0, 0, 0);
		System.out.println(Min);
	}

	private static void comb(int cnt, int start, int N, List<Color> list, int mr, int mb, int mg) {
		if (cnt >= 7) {
			return;
		}
		for (int i = start; i < N; i++) {
			mr += list.get(i).r;
			mb += list.get(i).b;
			mg += list.get(i).g;
			if (cnt > 0) {
				int diff = Math.abs(R - (mr / (cnt + 1))) + Math.abs(G - (mg / (cnt + 1)))
						+ Math.abs(B - (mb / (cnt + 1)));
				Min = Math.min(Min, diff);
			}
			comb(cnt + 1, i + 1, N, list, mr, mb, mg);
			mr -= list.get(i).r;
			mb -= list.get(i).b;
			mg -= list.get(i).g;
		}
	}

	static class Color {
		int r, g, b;

		public Color(int r, int g, int b) {
			super();
			this.r = r;
			this.g = g;
			this.b = b;
		}

	}
}

'알고리즘 > 백준_JAVA' 카테고리의 다른 글

17406. 배열 돌리기 4  (0) 2022.01.06
17472. 다리 만들기 2  (0) 2022.01.06
4811. 알약  (0) 2022.01.05
17073. 나무 위의 빗물  (0) 2021.12.31
17478. 재귀함수가 뭔가요?  (0) 2021.12.31