
알고리즘 분류 : 투 포인터
난이도 : 골드5
출처 : 백준 - 다이어트


투포인터 방식으로 문제를 해결한다.
두개의 포인터(p1,p2)를 각각 1,2에서 시작한다.
p2^2 - p1^1이 G와 같은 경우를 저장한다.
p2와 p1의 차이가 1이고 p2^2 - p1^1이 G보다 클 경우 더 이상 불가능하기 때문에 반복문을 종료한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int G = Integer.parseInt(br.readLine());
int p1=1,p2=2;
while(p2>p1) {
if(p2-p1==1 && Math.pow(p2,2)-Math.pow(p1,2)>G) {
break;
}
if(Math.pow(p2,2)-Math.pow(p1,2)==G) {
sb.append(p2).append("\n");
p1++;
p2++;
}
else if(Math.pow(p2,2)-Math.pow(p1,2)>G)
p1++;
else
p2++;
}
System.out.println(sb.length() == 0 ? -1 : sb);
}
}

문제를 해석하기 어려웠다. 반복문 종료 조건을 잘 찾는것이 포인트다.