백준
백준 14244: 트리 만들기(java)
unhyepnhj
2024. 8. 20. 16:43
문제
풀이
정점 0의 레벨을 1이라 하자. 정점 0은 무조건 정점 1과만 연결된 리프여야 하고, 최하위 (m-1)개의 정점들은 모두 바로 위 정점과 연결된 리프이므로 레벨 (n-m-1)까지의 정점들은 바로 다음 정점과만 연결된다.
for문을 사용해 위 내용을 그대로 구현하면 된다.
위 방식으로 풀었을 때 예제 4가 예시 출력과 다르게 출력됐는데, 정답으로 채점되기는 한다.
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
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());
StringBuilder sb=new StringBuilder();
for(int i=0; i<n-m; i++) { //정점 (n-m-1)까지 바로 다음 정점과 연결
sb.append(i+" "+(i+1)+"\n");
}
int upperleaf=n-m; //upperleaf=최하위 리프들 바로 위의 정점
for(int i=1; i<m; i++) {
sb.append(upperleaf+" "+(upperleaf+i)+"\n");
//upperleaf 정점은 (m-1)개의 리프들을 자식으로 가짐
}
System.out.println(sb);
}
}