Tags
- sort
- Java
- ์ ๋ ฌ
- BFS
- PGM
- ์๋ฎฌ๋ ์ด์
- queue
- Python
- ์๋ฃ๊ตฌ์กฐ
- ์ ์๋ก
- Study
- SpringBoot
- ๊ตฌํ
- ์ํ
- ๊ทธ๋ํ ํ์
- ๋๋น ์ฐ์ ํ์
- BOJ
- ๊น์ด ์ฐ์ ํ์
- stack
- ๋ฐฑํธ๋ํน
- greedy
- Dynamic Programming
- Brute Force Algorithm
- LV2
- DP
- CodingTest
- dfs
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- ๊ต์ฌ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1954 : ํํ์คํ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- 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
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_19621 : ํ์์ค ๋ฐฐ์ 2 (0) | 2023.02.20 |
---|---|
BOJ_1697 : ์จ๋ฐ๊ผญ์ง (0) | 2023.02.12 |
BOJ_1992 : ์ฟผ๋ํธ๋ฆฌ (0) | 2023.02.10 |
BOJ_2312 : ์ ๋ณต์ํ๊ธฐ (0) | 2023.02.10 |
BOJ_7507 : ์ฌ๋ฆผํฝ ๊ฒ์ (0) | 2023.02.07 |