11월 7일(화) - 자료 구조 (1717번)
1717번: 집합의 표현
초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(C언어 풀이 활용)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] parent;
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 m = Integer.parseInt(st.nextToken());
parent = new int[n+1];
for(int i=0; i<=n; i++)
{
parent[i] = i;
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<m; i++)
{
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(num == 0)
{
union(a,b);
}
else
{
if(find(a) == find(b))
{
sb.append("YES").append('\n');
}
else
{
sb.append("NO").append('\n');
}
}
}
System.out.print(sb);
}
public static int find(int x){
if(parent[x] == x)
{
return x;
}
return parent[x] = find(parent[x]);
}
public static void union(int x, int y){
x = find(x);
y = find(y);
if(x != y)
{
if(x < y)
{
parent[y] = x;
}
else
{
parent[x] = y;
}
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(Java) > 23년 11월' 카테고리의 다른 글
[Java] 백준 - 2133번: 타일 채우기 (0) | 2023.11.13 |
---|---|
[Java] 백준 - 2206번: 벽 부수고 이동하기 (0) | 2023.11.10 |
[Java] 백준 - 1182번: 부분수열의 합 (0) | 2023.11.09 |
[Java] 백준 - 2437번: 저울 (0) | 2023.11.08 |
[Java] 백준 - 14501번: 퇴사 (0) | 2023.11.06 |
댓글