본문 바로가기
알고리즘/백준

백준 16562. 친구비

by kastori 2021. 12. 21.
반응형

문제

https://www.acmicpc.net/problem/16562

 

16562번: 친구비

첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (

www.acmicpc.net

문제풀이

 학생들을 집합으로 묶을 때 비용을 최솟값으로 저장하면서 풀이가 가능 하다. 그래서 유니온 파인드를 사용해서 풀었다.
1. 친구관계 M개를 입력 받을 때, 학생들을 하나의 집합으로 합쳐준다.(union)
2. 해당집합을 합치면서 최솟값을 저장하고, 한쪽은 0으로 만든다. (union)
3. 저장된 최솟값들을 더한다음 k와 비교하여 k보다 크면 "Oh no", 작으면 그 수를 출력한다.

소스코드(Java)

더보기
package baek;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 * 친구비
 * https://www.acmicpc.net/problem/16562
 */
public class baek16562 {
	static int[] p, arr; //친구 관계 집합 배열과 값을 저장 할 배열

	public static void main(String[] args) throws Exception {
		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());
		int k = Integer.parseInt(st.nextToken());

		p = new int[N + 1];
		arr = new int[N + 1];
		st = new StringTokenizer(br.readLine());
		for (int i = 1; i <= N; i++) {
			p[i] = i;		//친구관계 초기화
			arr[i] = Integer.parseInt(st.nextToken());
		}

		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());

			union(a, b);
		}
		int answer = 0;
		for (int i = 1; i <= N; i++) {
			answer += arr[i];
		}
		if (answer > k) {
			System.out.println("Oh no");
		} else {
			System.out.println(answer);
		}
	}

	static void union(int a, int b) {
		a = find(a);
		b = find(b);

		if (a != b) {
			p[b] = a;
			arr[a] = Math.min(arr[a], arr[b]);
			arr[b] = 0;
		}
	}

	static int find(int x) {
		if (x == p[x]) {
			return x;
		}
		return p[x] = find(p[x]);
	}
}

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 1863. 스카이라인 쉬운거  (0) 2021.12.24
백준 18116. 로봇 조립  (0) 2021.12.23
백준 1992. 쿼드트리  (0) 2021.12.22
백준 17836. 공주님을 구해라!  (0) 2021.12.20
백준 19598. 최소 회의실 개수  (0) 2021.12.20

댓글