[백준] 1484번_다이어트 C++
in Study on Coding Test
수학 공식과 투 포인터를 사용하는 문제.
정답제출코드
#include <iostream>
#include <vector>
#define MAX 100000
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
vector<int> ans;
int G;
cin >> G;
int L = 1, H = 1;
while (L <= MAX && H <= MAX)
{
int tmp = (H+L) * (H-L);
if (tmp == G)
ans.push_back(H);
if (tmp < G)
H++;
else
L++;
}
if (ans.size() == 0)
cout << -1;
else
{
for (size_t i = 0; i < ans.size(); ++i)
cout << ans[i] << '\n';
}
return 0;
}
우선, 현재 몸무게를 H, 이전 몸무게를 L이라고 하자.
여기서 현재 몸무게의 제곱 - 이전 몸무게의 제곱 값은
(현재 몸무게 + 이전 몸무게) * (현재 몸무게 - 이전 몸무게)의 값과 같다.
그래서 코드에 tmp = (H+L) * (H-L) 값을 넣어주었다.
또한, 최대 값이 100000이므로 MAX로 정의하여
두 값이 모두 100000이하일 때에만 루프문을 돌도록 구현하였다.
이렇게 투 포인터를 사용해서 계산을 해주며 맞는 값이 나오면 벡터에 저장하도록 했다.
처음엔 이중 for문을 사용할 생각을 했지만 시간초과가 날 것 같아서
투 포인터를 사용하였다.