2024. 1. 9. 07:58ㆍ알고리즘
♣ 문제
♣ 문제 이해
n은 총 노드의 수, m은 리프 노드의 수를 가리킨다. m개의 리프노드는 부모 노드와는 연결되어 있어야 하지만 자식 노드는 갖지 않는다. 따라서 부모와 연결된 노선만 존재한다.
즉 n개의 노드가 주어지고, 리프 노드가 몇 개인지를 고려하여 노드들 사이의 노선을 완성하여 출력하면 되는 것이다.
예를 들어 예제가 4 2 일 때 예제 출력이 0 1, 1 2, 2 3이다.
위의 출력은 수많은 답 중 하나일 뿐이다(이 문제에는 스페셜 저지가 적용된다. 출력된 노선을 노드 사이에 그리면 0, 3 노드가 리프 노드이고, 1과 2는 그 외의 노드가 된다.
답이 이렇게 나와도 된다. 위의 그림에서는 1과 2가 리프노드이고 0과 2는 그 외의 노드가 되는 것이다.
♣ 해결 방법
처음에는 답이 하나만 있는 줄 알고 리프 노드를 어떻게 정하는지를 고민했는데 여러 가지 답이 있는 스페셜 저지 문제였다. 나는 아래와 같은 과정을 통해 문제를 풀었다.
1. n개의 노드를 0, 1, 2, 3... n-1 노드라고 생각한다.
2. n 개의 노드 중 0을 항상 첫 노드, 즉 연결을 주도하는 노드라고 생각한다. (마치 부모 노드처럼)
3. 0 노드를 제외하고 그 다음부터의 노드 중 m개를 0 노드에 연결한다. 예를 들어 입력이 5 3 이라면
0이 맨 위의 부모 노드이고, 그 다음 노드 1부터 시작해서 m개를 리프 노드처럼 연결한다. 여기서는 m이 3이므로 1, 2, 3 노드 3개를 노드 0에 연결한다.
'알고리즘' 카테고리의 다른 글
BFS(너비우선탐색2, 백준알고리즘 11725번) (0) | 2024.01.22 |
---|---|
BFS(너비 우선 탐색, 백준 알고리즘 16953번) (0) | 2024.01.16 |
신장트리(백준 알고리즘 9372번) (0) | 2024.01.07 |
DP(Dynamic Programming) 백준 알고리즘 1003번 (0) | 2023.12.31 |
DP(Dynamic Programming, 백준 알고리즘 14501번) (0) | 2023.12.28 |