(speed * (speed + 1)) / 2는 0 → speed까지 가속하는 거리로도, speed → 1까지 감속하는 거리로도 해석 가능하다.dist + speed + a > x 형태였고, 여기서 a = (speed * (speed + 1)) / 2였다.dist + speed + a > x와 같은 조건으로 속도 유지가 필요한 시점에도 감속을 하여 x에 도착하는 시간이 길어지는 문제가 발생했다.감속은 즉시 적용된다는 점
감속 거리 계산 자체는 맞지만, 적용 방식이 잘못되면 판단을 흐릴 수 있음
(speed * (speed + 1)) / 2는 올바른 수식이다.dist + a > x로 비교해야 정확하다.가속 조건 역시 다음 속도로 감속이 가능한지를 기준으로 판단해야 함
(speed + 1) * (speed + 2) / 2 수식을 사용하는 것이 올바른 기준이 된다.import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int dist = 0;
int speed = 0;
int time = 0;
while (dist < x) {
int diff = x - dist;
if (diff >= ((speed + 1) * (speed + 2)) / 2 )
speed++;
else if (diff < (speed * (speed + 1)) / 2)
speed--;
dist += speed;
time++;
}
System.out.println(time);
}
}