반응형
문제 링크: https://www.acmicpc.net/problem/1484
1484번: 다이어트
첫째 줄부터 한 줄에 하나씩 가능한 성원이의 현재 몸무게를 오름차순으로 출력한다. 가능한 몸무게가 없을 때는 -1을 출력한다. 현재 몸무게는 자연수로 떨어지지 않을 수도 있는데, 이런 경우는 제외해야 한다.
www.acmicpc.net
<문제 풀이> 투 포인터
G = E^2 - S^2를 만족하는 E를 구하면 된다.
E = 1, S = 1 에서 시작
다음을 반복한다.
1. E^2 - S^2 > G 이면서 E - S가 1이면 반복문 종료(가장 인접한 제곱수 끼리의 차가 G보다 크면 더 이상 답을 구할 수 없다 -> 1, 4, 9, 16,.... 나열해보면 알 수 있음)
2. E^2- - S^2 > G 이면 S++
3. E^2- - S^2 <= G 이면 E++
<c++ 소스 코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int g;
cin >> g;
long long e = 1, s = 1;
bool existed = false;
while (true) {
if (e * e - s * s == g) {
existed = true;
cout << e << "\n";
}
if (e - s == 1 && e * e - s * s > g) break;
if (e * e - s * s > g) s++;
else e++;
}
if (!existed) cout << -1;
return 0;
}
|
cs |
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1927번] 최소 힙 (0) | 2020.03.09 |
---|---|
[백준 11279번] 최대 힙 (0) | 2020.03.09 |
[백준 1806번] 부분합 (0) | 2020.03.05 |
[백준 1644번] 소수의 연속합 (0) | 2020.03.05 |
[백준 2003번] 수들의 합 2 (0) | 2020.03.05 |