Tags
- ์ ๋ ฌ
- Study
- Dynamic Programming
- ๊ตฌํ
- CodingTest
- SpringBoot
- ๊ต์ฌ
- sort
- ๋ฌธ์์ด
- ์ํ
- dfs
- ๊ทธ๋ํ ์ด๋ก
- stack
- ๋๋น ์ฐ์ ํ์
- Brute Force Algorithm
- ๊น์ด ์ฐ์ ํ์
- PGM
- ๋ฐฑํธ๋ํน
- queue
- greedy
- BFS
- ๊ทธ๋ํ ํ์
- ์๋ฃ๊ตฌ์กฐ
- Python
- DP
- BOJ
- LV2
- ์๋ฎฌ๋ ์ด์
- Java
- ์ ์๋ก
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1033 : ์นตํ ์ผ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- 10 ์ดํ์ ์์ฐ์ N์ด ์ฃผ์ด์ง๊ณ , N-1 ๊ฐ์ ์ฌ๋ฃ ๋น์จ์ด ์ฃผ์ด์ง๋ค.
- ์นตํ ์ผ์ ๋ง๋๋๋ฐ ํ์ํ ๊ฐ ์ฌ๋ฃ์ ์ต์ ์ง๋์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๊ธฐ์ค๊ฐ์ ์ฐพ๊ธฐ ์ํด ์ ๋ ฅ๋ p, q ๋น์จ๋ค์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ค.
- N๊ฐ์ ์ฌ๋ฃ์ N-1์ ์ฐ๊ฒฐ ์ ๋ณด๋ N๊ฐ์ ๋
ธ๋์ N-1์ ๊ฐ์ ์ ๋ณด์ด๋ฏ๋ก ํธ๋ฆฌ ํํ๋ก ๋ํ๋ผ ์ ์๋ค.
- ํ ๋ ธ๋์ ๊ฐ์ ๋ฃ๊ณ DFS๋ก ์ธ์ ํ ๋ ธ๋๋ฅผ ํ์ํ๋ฉฐ ์ ๋ ฅ๋ ๋น์จ๋ก ๊ฐ ๋ ธ๋์ ์ง๋ ๊ฐ์ ๋ง๋ค์ด ๊ฐ๋ค.
- ๋ชจ๋ ๋ ธ๋์ ๊ฐ์ ์ต๋๊ณต์ฝ์๋ฅผ ๋ค์ ํ๋ฒ ๊ณ์ฐํ๋ค.
- ๊ตฌํ ์ต๋๊ณต์ฝ์๋ก ๋
ธ๋์ ๊ฐ์ ๋๋ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๋ชจ๋ ์ฌ๋ฃ์ ํฉ์ด ์ต์๊ฐ ๋๋ฉด์ ์ ์๊ฐ ๋๋๋ก ํ๊ธฐ ์ํด ๋๋๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
private static boolean[] visited;
private static ArrayList<Node>[] adjlist;
private static int N;
private static long[] D;
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
visited = new boolean[N];
adjlist = new ArrayList[N];
D = new long[N];
for (int i = 0; i < N; i++) {
adjlist[i] = new ArrayList<>();
}
long lcm = 1;
for (int i = 0; i < N - 1; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
int q = Integer.parseInt(st.nextToken());
adjlist[a].add(new Node(b, p, q));
adjlist[b].add(new Node(a, q, p));
lcm *= (long) p * q / gcd(p, q);
}
// DFS
D[0] = lcm;
dfs(0);
long gcd = D[0];
for (int i = 1; i < N; i++) {
gcd = gcd(gcd, D[i]);
}
// Output
StringBuilder sb = new StringBuilder();
for (long i : D) {
sb.append(i / gcd).append(' ');
}
bw.write(sb.toString());
bw.flush();
}
private static void dfs(int now) {
visited[now] = true;
for (Node node : adjlist[now]) {
if (!visited[node.num]) {
D[node.num] = D[now] * node.numerator / node.denominator;
dfs(node.num);
}
}
}
private static long gcd(long a, long b) {
if (b == 0) return a;
return gcd(b, a % b);
}
private static class Node {
int num;
int denominator;
int numerator;
public Node(int num, int denominator, int numerator) {
this.num = num;
this.denominator = denominator;
this.numerator = numerator;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- N-1๊ฐ์ ์ฌ๋ฃ ๋น๋ฅผ ์
๋ ฅ๋ฐ์ ์ธ์ ํ๋ ฌ๋ก ์ ์ฅํ๋ค.
- ์ด๋ ๋น์จ์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ณฑ์ ๋์ ์ผ๋ก ๊ณ์ฐํ๋ฏ๋ก longํ์ผ๋ก ๊ณ์ฐํด์ผ ํ๋ค.
- ๊ณ์ฐ๋ ์ต์๊ณต๋ฐฐ์๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ๋ฃ(๋
ธ๋) ํ์์ ์งํํ๋ค.
- ํ์ํ๋ฉฐ ์ ๋ ฅ๋ ๋น์จ์ ๋ฐ๋ผ์ ์ฌ๋ฃ ๋ณ ์ง๋ ๊ฐ์ D๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- ํ์ ํ ๋ค์ ํ๋ฒ ์ฌ๋ฃ๋ค์ ์ง๋ ๊ฐ์ผ๋ก ์ต๋๊ณต์ฝ์๋ฅผ ๊ณ์ฐํ๋ค.
- ์ต๋๊ณต์ฝ์๋ก ๋๋ ์ฌ๋ฃ ์ง๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- N์ด ์ต๋ 10, p์ q๊ฐ ์ต๋ 9์ฌ์ intํ ๋ฒ์๋ก ๊ด์ฐฎ์ ๊ฒ์ด๋ผ ์๊ฐํ๋๋ฐ, ๋น์จ์ด ์ค์ฒฉ๋๋ฉด int ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์์๋ค.
- int๋ก ๋ด์ 1ํ ํ๋ฆฌ๊ณ , long์ผ๋ก ๋ณ๊ฒฝํด ๋ง์๋ค.
- ์ ๋ต ํด์ค์ ๋ณด๋ฉด์ ํ์ดํ๋๋ฐ, ์ต๋๊ณต์ฝ์/์ต์๊ณต๋ฐฐ์ ๋ฟ๋ง ์๋๋ผ ํ์๊น์ง ๋ค์ด๊ฐ ๋ณตํฉ์ ์ธ ๋ฌธ์ ์๋ค.
- ํ์ง๋ง ๊ฐ์ฅ ์ด๋ ค์ ๋ ๊ฑด, ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ดํดํ๋ ๊ฒ์ด์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_11779 : ์ต์๋น์ฉ ๊ตฌํ๊ธฐ 2 (0) | 2024.03.02 |
---|---|
BOJ_9935 : ๋ฌธ์์ด ํญ๋ฐ (0) | 2024.03.01 |
BOJ_1850 : ์ต๋๊ณต์ฝ์ (0) | 2024.02.21 |
BOJ_11689 : GCD(n, k) = 1 (0) | 2024.02.21 |
BOJ_1016 : ์ ๊ณฑ ใดใด ์ (0) | 2024.02.20 |