알고리즘
[BOJ] 1954 화학실험 - Java
Hzim
2023. 2. 11. 21:10
문제
https://www.acmicpc.net/problem/1954
1954번: 화학실험
우리에게는 n가지 종류의 화학 시약 t1, t2, ..., tn과 M mg의 용액이 있다. 이 용액 중 x mg을 시약 ti에 넣으면 aix+bi만큼의 어떤 가스가 발생한다고 한다. 시약에 넣을 수 있는 용액의 양은 자연수이
www.acmicpc.net
풀이
- 주어지는 용액의 양을 분배하여 시약에 넣고, 동일하게 생성되는 가스양이 있다면 가스양 출력, 그렇지 않다면 0 출력
- n개의 시약이 모두 같은양의 가스를 발생시키는 경우가 여러 개일 수 있는데 주어지는 용액을 모두 사용하는 경우만 구해야함
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[][] s = new int[n][2];
int result =0;
for(int i=0; i<n; i++){
st = new StringTokenizer(br.readLine());
s[i][0]= Integer.parseInt(st.nextToken());
s[i][1]= Integer.parseInt(st.nextToken());
}
int m = Integer.parseInt(br.readLine());
int gas =0;
for(int i=1; i<=m-(n-1); i++){
int use = i;
int num = 0;
gas = s[0][0]*i + s[0][1];
for(int j=1; j<n; j++){
num = (gas - s[j][1])/s[j][0];
use += num;
}
if(use == m) {
result = 1;
break;
}
}
if(result == 1) System.out.println(gas);
else System.out.println(0);
}
}
- 0번째 인덱스의 시약이 발생시킬 수 있는 가스의 양을 기준으로 사용한 용액의 양을 저장
- 여러가지 시약을 차례대로 0번째 인덱스가 생성한 가스의 양을 생성할 수 있는지 판단하고, 모든 시약을 검사했을 때 최종적으로 주어진 m 용액을 모두 사용하는 경우를 구해서 출력
- 모두 검사해도 m용액을 사용하지 못하거나 동일한 가스양을 생성하지 못한다면 0 출력