※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts