반응형

문제 링크: 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

+ Recent posts