문제링크 : https://www.acmicpc.net/problem/13116
13116번: 30번
첫 번째 줄에 테스트 케이스의 수 T (1 ≤ T ≤ 50 000)가 주어진다. 이후 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 구성되어 있으며, 각 줄에는 두 개의 정수 A와 B (1 ≤ A, B ≤ 1
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int T, A, B;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--)
{
cin >> A >> B;
while(A!=B) //서로 만날 때까지 (조상노드가 같을 때까지)
{
if(A>B) A=A/2; //큰 값 기준으로 부모노드 찾기
else B=B/2;
}
cout << A*10 << "\n";
}
return 0;
}
최소 공통 조상 문제를 골드에서 처음 접하여 실버에서는 어떤 난이도인지 궁금해서 풀게된 문제이다.
해당 문제의 트리 그림을 보면 완전 이진 트리인 것을 알 수 있다.
완전 이진 트리의 부모의 위치는 자식 / 2이다.
이를 이용하여 입력받은 A, B가 같아질 때 까지 큰 값을 기준으로 2를 계속 나누며 조상 노드를 찾아나가면 된다.
이후 출력은 문제에서 K*10을 하도록 했으므로 A or B에 10을 곱해서 출력해준다.
'백준 > 실버' 카테고리의 다른 글
[백준 14495번] 피보나치 비스무리한 수열 (C++) (0) | 2023.11.05 |
---|---|
[백준 25516번] 거리가 k이하인 트리 노드에서 사과 수확하기 (C++) (0) | 2023.11.03 |
[백준 25511번] 값이 k인 트리 노드의 깊이 (C++) (0) | 2023.10.28 |
[백준 9372번] 상근이의 여행 (C++) (0) | 2023.10.27 |
[백준 1309번] 동물원 (C++) (0) | 2023.10.20 |