
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;
}
[ 주의할 점 ]
투 포인터의 개념을 잘 이용하면 쉬운 문제였다.
'백준' 카테고리의 다른 글
| [ 백준 17826 ] 나의 학점은? (c/c++) (0) | 2025.03.20 |
|---|---|
| [ 백준 18428 ] 감시 피하기 (c/c++) (0) | 2025.03.18 |
| [ 백준 1261 ] 알고스팟 (c/c++) (0) | 2025.03.12 |
| [ 백준 1043 ] 거짓말 (c/c++) (0) | 2025.03.10 |
| [ 백준 4485 ] 녹색 옷 입은 애가 젤다지? (c/c++) (0) | 2025.03.09 |