※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1484번 문제인 다이어트이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1484
1484번: 다이어트
성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.
www.acmicpc.net
50000을 넘는 자연수 X에 대하여 X와 X-1의 차는 항상 10만을 넘음을 관찰하자.
위 관찰을 이용하면, 1부터 50000까지의 제곱수를 오름차순으로 구해나가면서 각 제곱수에서 G를 뺀 수가 앞서 등장한 적이 있는지를 체크하는 것으로 문제를 해결할 수 있음을 확인할 수 있다. 이는 set 등의 자료구조를 이용하면 간단하게 해낼 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <set>
using namespace std;
typedef long long ll;
ll G;
set<ll> st;
bool chk;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> G;
for (ll i = 1; i < 50001LL; i++) {
if (st.count(i * i - G)) cout << i << '\n', chk = 1;
st.insert(i * i);
}
if (!chk) cout << -1;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28138 // C++] 재밌는 나머지 연산 (0) | 2023.10.24 |
---|---|
[BOJ 12931 // C++] 두 배 더하기 (1) | 2023.10.23 |
[BOJ 27915 // C++] 금광 (1) | 2023.10.21 |
[BOJ 27914 // C++] 인터뷰 (0) | 2023.10.20 |
[BOJ 14171 // C++] Cities and States (0) | 2023.10.19 |