성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. 성원이는 엔토피아가 선물해준 저울 위에 올라갔다. “안돼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! G 킬로그램이나 더 쪘어ㅜㅠ”라고 성원이가 말했다. 여기서 말하는 G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것이다.
성원이의 현재 몸무게로 가능한 것을 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 G가 주어진다. G는 100,000보다 작거나 같은 자연수이다.
첫째 줄부터 한 줄에 하나씩 가능한 성원이의 현재 몸무게를 오름차순으로 출력한다. 가능한 몸무게가 없을 때는 -1을 출력한다. 현재 몸무게는 자연수로 떨어지지 않을 수도 있는데, 이런 경우는 제외해야 한다.
15
4
8
출력값: 현재 몸무게로 가능한 것들 출력
[조건]
→ 조건 이용해서 풀기
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
const G = +input[0]; // G킬로그램 (G = 현재 몸무게^2 - 이전 몸무게^2)
const answer = [];
let currentWeight = parseInt(Math.sqrt(G)) + 1; // 현재 몸무게 시작
while (true) {
const prevWeight = Math.sqrt(currentWeight ** 2 - G); // 이전 몸무게 구하기
if (parseInt(prevWeight) === prevWeight) answer.push(currentWeight); // 가능한 현재 몸무게인 추가
if (parseInt(prevWeight) + 1 >= currentWeight) break; // 이전 몸무게가 현재 몸무게보다 크거나 같은 경우 탐색 종료
currentWeight += 1; // 다음 현재 몸무게 탐색
}
if (answer.length === 0) return console.log(-1); // 가능한 현재 몸무게가 없는 경우 -1 리턴
console.log(answer.join('\n'));