Recent Posts
Notice
No Rules Rules
2022년이 아름다웠던 이유 (feat. 백준, 27065번) 본문
728x90
반응형
2022년이 아름다웠던 이유
https://www.acmicpc.net/problem/27065
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string.h>
#include <vector>
#include <cmath>
using namespace std;
vector<int> arr;
int dp[5001]; // 1 : 부족수, 2 : 완전수, 3 : 과잉수
vector<int> getNumbers(int target_number){
vector<int> temp;
for(register int i = 1; i <= sqrt(target_number); ++i){
if(target_number % i == 0){
if(i * i == target_number)
temp.push_back(i);
else
temp.push_back(i), temp.push_back(target_number / i);
}
}
return temp;
}
bool calcNumbers(int target_number, vector<int> arr){ // 과잉수면 true
register int sum = 0;
bool ret = false;
for(auto value : arr)
if(value != target_number)
sum += value;
if(sum < target_number)
dp[target_number] = 1;
else if(sum == target_number)
dp[target_number] = 2;
else
dp[target_number] = 3, ret = true;
return ret;
}
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
memset(dp, 0, sizeof(dp));
register int T, N;
cin >> T;
for(register int t = 0; t < T; ++t){
cin >> N;
auto arr = getNumbers(N);
if((dp[N] != 0 && dp[N] != 3) || (dp[N] == 0 && !calcNumbers(N, arr))) // 과잉수가 아님
cout << "BOJ 2022" << "\n";
else{
bool check = true;
for(auto value : arr)
if(value != N){
if((dp[value] == 3) ||
(dp[value] == 0 && calcNumbers(value, getNumbers(value)))){ // 과잉수면 탈락
cout << "BOJ 2022" << "\n";
check = false;
break;
}
}
if(check){
cout << "Good Bye" << "\n";
}
}
}
return 0;
}
// *&)*@*
반응형
- 최초 문제에서 주어진 N에 대한 약수를 구합니다.
- 약수 중 N을 제외한 나머지 수를 연산합니다.
- 연산된 결과를 dp에 저장하고 조건에 따라 출력을 달리합니다. (N이 부족수라면 dp[N]은 부족수 라고 기록합니다.)
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
근손실 (feat. 백준, 18429번) (0) | 2023.01.06 |
---|---|
마라톤 1 (feat. 백준, 10655번) (0) | 2023.01.06 |
붙임성 좋은 총총이 (feat. 백준, 26069번) (0) | 2022.11.28 |
치킨댄스를 추는 곰곰이를 본 임스 2 (feat. 백준, 26068번) (0) | 2022.11.28 |
뒤집기 (feat. 백준, 1439번) (0) | 2022.11.23 |
Comments