어흥
[백준 1484] 다이어트 (C++) 본문
728x90
반응형
문제 링크: www.acmicpc.net/problem/1484
1. 주의할 점
- a*a - b*b = (a+b)*(a-b)로 접근한다
2. 구현
- G = (a+b)*(a-b)라고 생각하여 G의 약수중에서 작은 값을 V벡터에 넣는다. 즉, a-b의 값을 V에 너흔ㄴ다
- V에 있는 값을 통해 a+b를 구한다.
- {(a+b) + (a-b)}/2 = a 식을 통해 a를 구한다. 이때, 좌변은 2로 나누기 전, 짝수여야 한다
- 모든 a 값을 ans벡터에 넣고 정렬한 후, 출력한다
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
int main() {
int num,result=0,small,big;
cin>>num;
vector<int> v,ans;
for(int i=1;i<=sqrt(num);i++){
if(num%i==0){
if(num/i == i) continue;
v.push_back(i);
}
}
int len=v.size();
for(int i=0;i<len;i++){
int small = v[i];
int big = num/small;
if((big+small)%2==1) continue;
ans.push_back((big+small)/2);
}
sort(ans.begin(),ans.end());
if(ans.empty()) cout<<-1;
else{
for(int i=0;i<ans.size();i++)
cout << ans[i]<<'\n';
}
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2307] 도로 검문 (C++) (0) | 2021.03.19 |
---|---|
[백준 1446] 지름길 (C++) (0) | 2021.03.18 |
[백준] 키 순서 (C++) (0) | 2021.03.17 |
[백준 2688] 줄어들지 않아 (C++) (2) | 2021.03.11 |
[백준 16437] 양 구출 작전 (C++) (0) | 2021.03.11 |
Comments