본문 바로가기
백준/완전탐색

백준 2251. 물통

by 29살아저씨 2021. 8. 26.
반응형

🅰 백준 2251. 물통

 

2251번: 물통

각각 부피가 A, B, C(1≤A, B, C≤200) 리터인 세 개의 물통이 있다. 처음에는 앞의 두 물통은 비어 있고, 세 번째 물통은 가득(C 리터) 차 있다. 이제 어떤 물통에 들어있는 물을 다른 물통으로 쏟아 부

www.acmicpc.net

✏️ 문제 풀이

  •  

✏️ 소스코드

package bruteforce;

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

public class Main_실버1_2251_손은성 {
	static final int max = 201;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Queue<int[]> q = new LinkedList<int[]>();
		boolean visited[][] = new boolean[max][max];
		LinkedList<Integer> ans = new LinkedList<Integer>();
		StringTokenizer st = new StringTokenizer(br.readLine());
		int A = Integer.parseInt(st.nextToken());
		int B = Integer.parseInt(st.nextToken());
		int C = Integer.parseInt(st.nextToken());

		int push[] = { 0, 0 };
		q.add(push);

		while (!q.isEmpty()) {
			int a = q.peek()[0];
			int b = q.peek()[1];
			int c = C - a - b;
			q.poll();

			if (visited[a][b])
				continue;

			if (a == 0)
				ans.add(c);

			visited[a][b] = true;
			if (a + b <= B) {
				q.add(new int[] { 0, a + b });
			} else {
				q.add(new int[] { a + b - B, B });
			}
			if (a + c <= C) {
				q.add(new int[] { 0, b });
			} else {
				q.add(new int[] { a + c - C, b });
			}
			if (b + a <= A) {
				q.add(new int[] { a + b, 0 });
			} else {
				q.add(new int[] { A, b + a - A });
			}
			if (b + c <= C) {
				q.add(new int[] { a, 0 });
			} else {
				q.add(new int[] { a, b + c - C });
			}
			if (c + a <= A) {
				q.add(new int[] { a + c, b });
			} else {
				q.add(new int[] { A, b });
			}
			if (c + b <= B) {
				q.add(new int[] { a, b + c });
			} else {
				q.add(new int[] { a, B });
			}
		}
		Collections.sort(ans);
		for (int i = 0; i < ans.size(); i++) {
			System.out.print(ans.get(i)+" ");
		}
	}
}

 

✅ 후기

  •  
반응형

'백준 > 완전탐색' 카테고리의 다른 글

백준 5014. 스타트링크  (0) 2021.08.26
백준 9663. N-Queen  (0) 2021.08.26
백준 1697. 숨바꼭질  (0) 2021.08.26
백준 1182. 부분수열의 합  (0) 2021.08.26
백준 6603. 로또  (0) 2021.08.26

댓글