※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 14244번 문제인 트리 만들기이다.
문제는 아래 링크를 확인하자.

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

 

14244번: 트리 만들기

n과 m이 주어졌을 때, n개의 노드로 이루어져 있고, m개의 리프로 이루어져 있는 트리를 만드는 프로그램을 작성하시오. 항상 정답이 존재하는 경우만 입력으로 주어진다. 트리는 사이클이 없는

www.acmicpc.net

 

n이 3 이상인 트리에는 항상 degree가 2 이상인 노드(즉, 리프가 아닌 노드)가 존재한다. 따라서 0번 노드가 리프가 아니라고 가정해도 문제의 조건을 만족하는 트리를 항상 찾을 수 있다.

 

이제 1번부터 m번 노드를 각각 0번 노드와 연결해 리프로 삼고, m+1번 이상 번호의 노드는 기존 리프노드와 연결하는 것으로 총 리프의 수를 유지하면 문제의 조건을 만족하는 트리를 항상 얻을 수 있다. 주어진 조건에 따라 mn1 이하이므로 위와 같은 트리 구성이 항상 가능함을 확인하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, M;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M;
	for (int m = 1; m <= M; m++) cout << 0 << ' ' << m << '\n';
	for (int i = M + 1; i < N; i++) cout << i - 1 << ' ' << i << '\n';
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 10407 // C++] 2 타워  (0) 2024.03.28
[BOJ 10357 // C++] Triples  (0) 2024.03.27
[BOJ 23128 // C++] Math  (0) 2024.03.25
[BOJ 16894 // C++] 약수 게임  (0) 2024.03.24
[BOJ 27505 // C++] 천국의 계단  (1) 2024.03.23

+ Recent posts