어흥

[백준 1484] 다이어트 (C++) 본문

알고리즘/백준

[백준 1484] 다이어트 (C++)

라이언납시오 2021. 3. 18. 19:04
728x90
반응형

문제 링크: www.acmicpc.net/problem/1484

 

1484번: 다이어트

첫째 줄부터 한 줄에 하나씩 가능한 성원이의 현재 몸무게를 오름차순으로 출력한다. 가능한 몸무게가 없을 때는 -1을 출력한다. 현재 몸무게는 자연수로 떨어지지 않을 수도 있는데, 이런 경우

www.acmicpc.net

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