https://www.acmicpc.net/problem/27065
27065번: 2022년이 아름다웠던 이유
각 테스트 케이스에 대해, $n$이 과잉수이면서 $n$을 제외한 $n$의 모든 약수가 부족수이거나 완전수라면 Good Bye, 그렇지 않다면 BOJ 2022를 한 줄에 하나씩 차례로 출력하여라.
www.acmicpc.net
솔루션
문제 이해가 살짝 난해해서 쉽게 풀지 못했다..ㅎ
어떤 수 N에 대해서
먼저 자기 자신을 제외한 약수들의 총합을 더하고, 또 나눠지는 수에 대해서 과잉수인지 아닌지를 판단하는 배열을 만들어서 해결 했다.
코드
#include <iostream>
using namespace std;
//부족or완전이면 1,
//과잉이면 2
int overNum[5002];
//조건에 만족하면 2
//조건에 만족X 1
int is_beauty[5002];
int calcBeauty(int idx) {
int sum = 1;
bool is_over = false;
if (is_beauty[idx] != 0) {
return is_beauty[idx];
}
if (idx == 1) {
return overNum[idx] = 1;
}
else {
for (int i = 2; i < idx; i++) {
if (idx % i == 0) {
sum += i;
//과잉수가 있다고 하면,
calcBeauty(i);
if (overNum[i] == 2) {
is_over = true;
}
}
}
}
if (sum > idx) {
overNum[idx] = 2;
if (is_over) {
return is_beauty[idx] = 1;
}
else {
return is_beauty[idx] = 2;
}
}
else {
overNum[idx] = 1;
return is_beauty[idx] = 1;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int tc;
cin >> tc;
while (tc--) {
int N;
cin >> N;
calcBeauty(N)==2? (cout<<"Good Bye\n") : (cout<<"BOJ 2022\n");
}
}
'백준' 카테고리의 다른 글
C++[백준]1774번 우주신과의 교감 (0) | 2023.01.13 |
---|---|
C++[백준]26150번 Identify, Sort, Index, Solve (0) | 2023.01.13 |
C++ [백준]2630번 색종이 만들기 (0) | 2023.01.11 |
C++[백준]17404번 RGB거리 2 (1) | 2023.01.10 |
C++[백준]2887번 행성 터널 (1) | 2023.01.05 |