CodingTest/Java
BOJ_1954 : ννμ€ν
Soom_1n
2023. 2. 10. 09:45
1954λ²: ννμ€ν
μ°λ¦¬μκ²λ nκ°μ§ μ’ λ₯μ νν μμ½ t1, t2, ..., tnκ³Ό M mgμ μ©μ‘μ΄ μλ€. μ΄ μ©μ‘ μ€ x mgμ μμ½ tiμ λ£μΌλ©΄ aix+biλ§νΌμ μ΄λ€ κ°μ€κ° λ°μνλ€κ³ νλ€. μμ½μ λ£μ μ μλ μ©μ‘μ μμ μμ°μμ΄
www.acmicpc.net
πΈ λ¬Έμ λΆμ πΈ
- n μ’
λ₯μ νν μμ½ t1, t2, ..., tnμ μ 보 aiμ bi, κ·Έλ¦¬κ³ M mgμ μ©μ‘μ΄ μ£Όμ΄μ§λ€.
- μ©μ‘ μ€ x mgμ μμ½ ti μ λ£μΌλ©΄ ai*x+bi λ§νΌμ κ°μ€κ° λ°μνλ€.
- nκ°μ νν μμ½ λͺ¨λ κ°μ μμ κ°μ€λ₯Ό λ°μμν¬ μ μμΌλ©΄ κ°μ€ μμ μΆλ ₯νκ³ , κ·Έλ΄ μ μμΌλ©΄ 0μ μΆλ ₯νλ€.
- μ©μ‘μ΄ λ¨μΌλ©΄ μλλ€.
- μ©μ‘μ μ x mg μ 1λΆν° λλ €κ°λ©° μ©μ‘λ€μ λ£μ΄λ³΄κ³ κ°μ μμ κ°μ€κ° λ°μνλ κ²½μ°κ° μλμ§ λͺ¨λ νμΈν΄μΌ νλ€.
- κ²½μ°μ μ νμΈ μ€, λͺ¨λ κ°μ μμ κ°μ€κ° λ°μνλ κ²½μ°λ₯Ό μ°ΎμΌλ©΄ κ·Έ κ°μ€ μμ μΆλ ₯νκ³ μ’ λ£νλ€.
- λκΉμ§ νμν΄λ κ°μ μμ κ°μ€κ° λ°μνλ κ²½μ°κ° μμΌλ©΄ 0μ μΆλ ₯νλ€.
πΈ μ½λ πΈ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static int[] a;
static int[] b;
private static boolean recursion(int idx, int ml, int befor_gas) {
if (idx == n) {
return ml == 0;
}
for (int i = 1; i <= ml-(n-idx-1); i++) {
int now_gas = a[idx]*i+b[idx];
if (now_gas == befor_gas && recursion(idx+1, ml - i, befor_gas)) {
return true;
} else if (now_gas > befor_gas) {
break;
}
}
return false;
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
a = new int[n];
b = new int[n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
a[i] = Integer.parseInt(st.nextToken());
b[i] = Integer.parseInt(st.nextToken());
}
m = Integer.parseInt(br.readLine());
int answer = 0;
for (int i = 1; i <= m - n + 1; i++) {
int gas = a[0]*i+b[0];
if (recursion(1, m-i, gas)) {
answer = gas;
break;
}
}
System.out.println(answer);
}
}
πΈ μ½λ ν΄μ πΈ
- main λ©μλμμ nκ°μ μμ½ μ 보μ μ©μ‘μ μ mμ μ λ ₯λ°λλ€.
- μ©λ mμ 1λΆν° m-(n-1) κΉμ§ ν€μκ°λ©° κ³μ°νλ€.
- recursion λ©μλλ₯Ό νΈμΆνκ³ , trueκ° λ°ν λλ©΄ μ λ΅μ gasλ₯Ό μ μ₯νκ³ λ°λ³΅μ μ’ λ£νλ€.
- recursion λ©μλλ (νμ¬ κ³ λ₯Έ μμ½ μ idx, λ¨μ μ©μ‘ ml, μ΄μ μ λμ¨ κ°μ€ befor_gas) λ₯Ό μΈμλ‘ λ°μΌλ©΄ ture,falseλ₯Ό λ°ννλ€.
- idxκ° nμ΄ λλ©΄, λ¨μ μ©μ‘μ΄ 0μ΄λ©΄ ture, μλλ©΄ falseλ₯Ό λ°ννλ€. (μ©μ‘μ΄ λ¨μΌλ©΄ μλλ€)
- forλ¬Έμμλ idxλ²μ§Έ μμ½μ λ£μ μ©μ‘μ 1λΆν° ml-(n-idx-1) κΉμ§ λ£μ΄λ³Έλ€.
- λμ¨ κ°μ€ now_gasκ° μ΄μ κ°μ€ befor_gasμ κ°μΌλ©΄, λ€μ recursion λ©μλμ λ€μ μμ½μ νμΈνλ€.
- trueκ° λ°ν λλ©΄, λκ°μ΄ trueλ₯Ό λ°ννλ€.
- λ§μ½ now_gas>befor_gasλΌλ©΄, μμ½μ λ λ£μ΄λ λ λ§μ κ°μ€κ° λμ¬ κ²μ΄λ―λ‘ now_gas==befor-gassμΈ μν©μ΄ μ€μ§ μλλ€. λ°λΌμ breakλ‘ λΉ μ Έλμ¨λ€.
- falseλ₯Ό λ°ννλ€.
πΈ end πΈ
- μ©μ‘μ μμ μ΄λ»κ² μ‘°μ ν΄μΌ νλ κ³ λ―Όνλ€κ°, λͺ¨λ κ²½μ°λ₯Ό λ€ λ°μ ΈμΌ ν κ² κ°μμ μ¬κ· λ©μλλ₯Ό μ¬μ©νλ€.
- μ¬κ· λ©μλμ λ°λ³΅ νμ μ΅μ νλ₯Ό μν΄ forλ¬Έμ μ’ λ£ μ‘°κ±΄μ μ§μ νλκ² μ΄λ €μ λ κ² κ°λ€.
- λ¬Έμ λΆμκ³Ό νμ΄ κ³νμ μ μ΄κ°λ©° νμ΄νλ€.
728x90