티스토리 뷰
SWEA #18662 등차수열 만들기
🔒 문제 설명
세 개의 실수 x,y,z가 등차수열을 이룬다는 것은, y - x = z - y라는 것과 동치이다.
세 정수 a,b,c가 주어진다. 당신은 음이 아닌 실수 x을 정한 뒤, 세 정수 중 하나에서 x만큼을 더하거나 뺄 수 있다. 당신은 이러한 작업을 정확히 한 번 하여 a,b,c가 등차수열을 이루도록 하려고 한다.
이것이 가능하도록 하는 가장 작은 x의 값이 얼마인지 구하는 프로그램을 작성하라.
⌨️ 입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 하나의 줄로 이루어진다. 각 줄에는 세 개의 정수 a,b,c (0≤a,b,c≤1000)가 공백 하나를 사이로 두고 주어진다.
🖥️ 출력
각 테스트 케이스마다 한 줄에 하나씩, a,b,c가 등차수열을 이루도록 할 수 있는 가장 작은 x의 값을 출력한다. 참값과의 절대 오차 또는 상대 오차가 10-9이하이면 정답 처리된다.
x의 값이 정수가 아닐 수 있음에 유의하라. (x값은 소수점 1자리까지 출력한다.)
import java.util.Scanner;
class Solution {
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
double x = sc.nextDouble();
double y = sc.nextDouble();
double z = sc.nextDouble();
double a = y - x;
double b = z - y;
//gap = 등차수열의 공차
double gap = (a + b) / 2;
//original = x + gap, 즉 y의 올바른 값
double original = x + gap ;
double answer = y - original;
if(answer<0) answer *= -1;
System.out.println("#"+test_case+" "+answer);
}
}
}
처음에 문제를 딱 봤을 땐 이게 뭐지 했는데 수학적인 사고로 조금만 고민해보면 정말 쉽게 풀리는 문제이다.
이 때, 주의할 점은 x,y,z 세 개의 숫자 중 하나에만 더하거나 빼서 등차수열을 만든다는 점이다.
힌트는 세 개의 숫자 중 ' y ' 하나가 바로 그 더하거나 빼는 대상이 된다는 점이다.
그래서 공차를 구하고 그 공차 값을 이용해서 y가 얼마나 모자른지 아니면 큰지 갭을 구해서 출력하면 된다.