반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- 코딩테스트
- 백준
- 상한가 이유
- 경제
- boj
- 상한가 분석
- 이진우의 손에 잡히는 경제
- 주식 분석
- 주식 상한가
- 프로그래머스
- java
- Programmers
- 테마주
- 손에 잡히는 경제 요약
- 알고리즘
- 급등 이유
- 손경제 요약
- 주식
- 이진우
- 상한가
- 코테
- 손에 잡히는 경제
- 경제뉴스 요약
- 파이썬
- 자바
- 급등주 분석
- 급등주
- 손경제
- 경제뉴스
Archives
- Today
- Total
Completion over Perfection
백준 3584 - 가장 가까운 공통 조상 (JAVA) 본문
반응형
https://www.acmicpc.net/problem/3584
루트노드가 1이 아닌점을 주의해서 풀이해주시면 됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int T, N;
static int [] parent, depth, visits;
static List<Integer> [] list;
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
T = Integer.parseInt(br.readLine());
for (int test_case=1; test_case<=T; test_case++){
N = Integer.parseInt(br.readLine());
list = new ArrayList[N+1];
parent = new int [N+1];
depth = new int [N+1];
visits = new int [N+1];
for (int i=1; i<=N; i++){
list[i] = new ArrayList<>();
}
for(int i=0; i<N-1; i++){
st = new StringTokenizer(br.readLine());
int tmp1 = Integer.parseInt(st.nextToken());
int tmp2 = Integer.parseInt(st.nextToken());
if (visits[tmp2]!=1) visits[tmp2]=1; // 체크 처리 -> 너는 루트가 될 수 없다
list[tmp1].add(tmp2);
list[tmp2].add(tmp1);
}
// 루트 노드를 찾는 과정 필요
int root = 0;
for (int i=1; i<=N; i++){
if (visits[i]!=1) {
root = i;
break;
}
}
// System.out.println("root node : " + root);
init(root,1,0);
st = new StringTokenizer(br.readLine());
int tmp1 = Integer.parseInt(st.nextToken());
int tmp2 = Integer.parseInt(st.nextToken());
int ans = LCA(tmp1, tmp2);
System.out.println(ans);
}
}
static void init(int cur,int h, int from){
depth[cur] = h;
parent[cur] = from;
for (int next : list[cur]){
if (next != from){
init(next, h+1, cur);
}
}
}
static int LCA(int a, int b){
int ah = depth[a];
int bh = depth[b];
while(ah>bh){
a = parent[a];
ah--;
}
while(bh>ah){
b = parent[b];
bh--;
}
while(a!=b){
a = parent[a];
b = parent[b];
}
return a;
}
}
반응형
'자바 (Java)' 카테고리의 다른 글
마이바티스 (MyBatis) 오라클 sql 오류 해결 (ORA-00933) (0) | 2023.05.02 |
---|---|
백준 13549 - 숨바꼭질3 (JAVA 자바 풀이) (0) | 2023.03.14 |
백준 1697 - 숨바꼭질 (JAVA 자바 풀이) (0) | 2023.03.13 |
백준 2470 - 두 용액 (JAVA 자바 풀이) (0) | 2023.03.02 |
백준 1806 - 부분합 (자바 JAVA) (0) | 2023.02.25 |
Comments