반응형
https://www.acmicpc.net/problem/1484
[ 문제풀이 ]
수학적으로 접근하면 쉽게 해결할 수 있는 문제이다.현재 몸무게를 x, 기억하고 있던 몸무게를 y로 둔다면 다음과 같이 표현할 수 있다.
G = x^2 - y^2
이를 풀어보면 다음과 같으며 결국 (x+y)와 (x-y)는 G의 약수여야 한다는 것을 알 수 있다.
G = (x+y)(x-y)
따라서 루트 G부터 1까지 차례대로 탐색해주면서 G의 약수를 찾아주면 된다.
주의해야 할 점은 우리가 구하고자 하는 값은 x이기 때문에 (x+y)와 (x-y)를 +하여 2x를 구한 후 2로 나눌 것이다. 이때 몸무게는 자연수여야 한다는 조건이 있기 때문에 더해준 값이 짝수여야 한다.
또한, 몸무게는 자연수이기 때문에 0이 될 수 없다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
int G = Integer.parseInt(br.readLine());
boolean find = false;
//G = x^2 - y^2 = (x + y)(x - y)
//x + y = G/k, x - y = k
//x = (G/k + k)/2, y = (G/k - k)/2
for (int k = (int) Math.sqrt(G); k >= 1; --k) {
if (G % k != 0) continue;
int v = G / k;
if ((v + k) % 2 != 0 || (v - k) / 2 == 0) continue;
find = true;
bw.write((v + k) / 2 + "\n");
}
if (!find) bw.write("-1\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
반응형
'Problem Solving > 백준' 카테고리의 다른 글
백준 7453 : 합이 0인 네 정수 (0) | 2021.08.10 |
---|---|
백준 16434 : 드래곤 앤 던전 (0) | 2021.08.09 |
백준 1647 : 도시 분할 계획 (0) | 2021.08.07 |
백준 1013 : Contact (0) | 2021.08.05 |
백준 10159 : 저울 (0) | 2021.08.04 |
댓글