본문 바로가기

ALGORITHM

백준 12886 돌 그룹 (Java)

1. 문제 링크

 

12886번: 돌 그룹

오늘 강호는 돌을 이용해 재미있는 게임을 하려고 한다. 먼저, 돌은 세 개의 그룹으로 나누어져 있으며 각각의 그룹에는 돌이 A, B, C개가 있다. 강호는 모든 그룹에 있는 돌의 개수를 같게 만들려

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. A, B, C를 입력받고, 만들 수 있는 돌 개수로 2차운 배열을 만든다.

2. 3 그룹의 합이 3의 배수가 아니라면 같은 개수로 나눌 수 없다.

3. DFS 탐색을 진행하며 A, B, C가 같은 개수가 나오는지 확인한다.

    3-1. A와 B, B와 C, C와 A를 각 단계에서 전부 비교해보면서 나오는지 확인한다.

    3-2. 방문 배열을 통해 작은 값과 큰 값이 나왔었는지 확인하고, 그 값들로 DFS 탐색을 진행한다.

 

4. 코드

import java.io.IOException;
import java.util.Scanner;

public class Main {
	static boolean[][] visit;
	static int result;
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
		int B = sc.nextInt();
		int C = sc.nextInt();
		visit = new boolean[1501][1501];
		
		if((A+B+C)%3 != 0) { //3 그룹으로 나눠지는지
			result = 0;
		}
		else {
			dfs(A, B, C);
		}
		
		System.out.println(result);
	}

	private static void dfs(int a, int b, int c) {
		if(a==b && b==c) {
			result = 1;
			return;
		}
		
		check(a, b, c);
		check(b, c, a);
		check(c, a, b);		
	}

	private static void check(int g1, int g2, int etc) {
		int min = Math.min(g1, g2);
		int max = Math.max(g1, g2);
		
		if(!visit[min+min][max-min]) {
			visit[min+min][max-min] = true;
			dfs(min+min, max-min, etc);
		}
	}
    
}

 

'ALGORITHM' 카테고리의 다른 글

백준 18430 무기 공학 (Java)  (0) 2023.06.26
백준 2156 포도주 시식 (Java)  (0) 2023.06.25
백준 14442 벽 부수고 이동하기 2 (Java)  (0) 2023.06.23
백준 2166 다각형의 면적 (Java)  (0) 2023.06.15
백준 14620 꽃길 (Java)  (0) 2023.06.14