본문 바로가기

백준

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

https://www.acmicpc.net/problem/1484

 

 

[ 문제 요약 ]

G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것일 때, G가 주어졌을 때 가능한 현재 몸무게를 오름차순으로 출력한다.

 

 

[ 문제 풀이 ]

1. 투 포인터를 이용해서 x는 1, y는 2에서 시작한다.

2. 만약 제곱의 차가 G보다 작으면 x++, 크면 y++를 한다.

3. 같은 경우 벡터에 넣는다.

4. x와 y가 동일해지는 경우까지 반복한다.

5. 벡터의 사이즈가 0인 경우 가능한 경우가 없으므로 -1을 출력한다.

 

 

[ 소스 코드 ]

#include <bits/stdc++.h>
using namespace std;

int x = 1, y = 2, cnt, G;
vector<int> v;

void Find() {
    while (x < y) {
        int num = y * y - x * x;
        if (num > G) x++;
        else if (num < G) y++;
        else if (num == G) {
            v.push_back(y);
            y++;
        }
    }
}

int main() {
    cin >> G;

    Find();

    if (v.size()) for (int i=0; i<v.size(); i++) cout << v[i] << "\n";
    else cout << -1;
    
    return 0;
}

 

 

 

[ 주의할 점 ]

투 포인터의 개념을 잘 이용하면 쉬운 문제였다.