ALGORITHM/BOJ

[BOJ] 1484번 다이어트 (C++)

yegyeom 2022. 1. 3. 14:19

문제 (https://www.acmicpc.net/problem/1484)

 

1484번: 다이어트

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.

www.acmicpc.net

(현재 몸무게)^2 - (예전 몸무게)^2 = 찐 몸무게

 

1부터 g까지의 모든 수를 배열에 담아두고 투 포인터를 실행했다. end는 현재 몸무게를 가리키는 포인터이고 start는 예전 몸무게를 가리키는 포인터로 설정했다.

 

위 식대로 찐 몸무게를 구한 후 구한 값이 g와 같다면 정답을 담아두는 배열에 삽입한다. 

g보다 작다면? 찐 몸무게를 더 늘려야 하므로 end(현재 몸무게)를 증가

g보다 크거나 같다면? 찐 몸무게를 줄여야 하므로 start(예전 몸무게) 증가


[소스코드]

/*
BOJ 1484번: 다이어트
2021-12-28
Two pointers
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int g;
cin >> g;
int arr[g];
int start = 0, end = 0;
vector<int> ans;
for(int i = 0 ; i < g ; i++) arr[i] = i + 1;
while(end < g) {
int weight = arr[end] * arr[end] - arr[start] * arr[start];
if(weight == g) ans.push_back(arr[end]);
if(weight < g) end++;
else start++;
}
if(ans.empty()) cout << -1;
else {
sort(ans.begin(), ans.end());
for(int i = 0 ; i < ans.size() ; i++) cout << ans[i] << '\n';
}
return 0;
}
view raw 1484.cpp hosted with ❤ by GitHub

'ALGORITHM > BOJ' 카테고리의 다른 글

[BOJ] 4386번 별자리 만들기 (C++)  (0) 2022.01.04
[BOJ] 11779번 최소비용 구하기 2 (C++)  (0) 2022.01.04
[BOJ] 1644번 소수의 연속합 (C++)  (0) 2022.01.03
[BOJ] 2470번 두 용액 (C++)  (0) 2022.01.03
[BOJ] 3107번 IPv6 (C++)  (0) 2022.01.03