문제링크 : https://www.acmicpc.net/problem/14715
14715번: 전생했더니 슬라임 연구자였던 건에 대하여 (Easy)
첫 번째 줄에 처음 주어진 슬라임의 에너지 K (2 ≤ K ≤ 1, 000, 000) 가 주어진다.
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int func(int n)
{
int cnt = 0;
int tmp = n;
for(int i=2; i<n; i++)
{
if(n%i==0)
{
while(tmp%i==0) //소인수 분해
{
cnt++; //노드 추가
tmp /= i;
}
}
}
if(cnt == 0) return 1; //소수는 1
return cnt;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int K;
cin >> K;
cout << ceil(log2(func(K))); //완전이진트리의 깊이가 곧 흠집의 개수
return 0;
}
분할이 안될때까지 하기에 결국 슬라임의 값이 소수가 될때까지 분할을 한다는 말과 같다.
소인수분해를 통해서 완전이진트리의 노드의 갯수를 구해준다.
여기서 소인수분해를 통해 구한 각 값이 완전이진트리의 맨 아래 값에 위치한다. (노드)
완전이진트리의 깊이가 곧 흠집의 갯수인데, 완전이진트리의 깊이는 노드의 갯수에 log2를 씌워준 값이다.
'백준 > 실버' 카테고리의 다른 글
[백준 14244번] 트리 만들기 (C++) (0) | 2023.06.06 |
---|---|
[백준 11292번] 키 큰 사람 (C++) (0) | 2023.06.04 |
[백준 14562번] 태권왕 (C++) (0) | 2023.05.31 |
[백준 12845번] 모두의 마블 (C++) (0) | 2023.05.30 |
[백준 25192번] 인사성 밝은 곰곰이 (C++) (0) | 2023.05.26 |