본문 바로가기

알고리즘(백준 등) 공부

SWEA 18662. 등차수열 만들기

세개의 숫자 순서대로 주어질 때 이 수들이 등차수열을 이루게 하기 위해 실수를 더하거나 뻬려한다. 이 실수의 최솟값을 구하는 문제이다.

 

두번째 숫자 - 첫번째 숫자 가 세번째 숫자 - 두번째 숫자 와 같다면 공차가 같아 이미 등차수열이므로 더하거나 뺄 필요 없어져 0.0을 출력한다.

int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken()), c = Integer.parseInt(st.nextToken());
double d1 = (double)(b-a), d2 = (double)(c-a)/2, d3 = (double)(c-b);
if(d1 == d2) {
    sb.append("0.0").append('\n');
    continue;
}

 

 

아니라면 a, b, c 중 하나를 다른 공차에 맞게 교정하는데 드는 최소 실수를 구한다. 

double min = Double.MAX_VALUE;
min = Math.min(min, Math.abs(a - (b - d3)));
min = Math.min(min, Math.abs(b - (a + d2)));
min = Math.min(min, Math.abs(c - (a + 2*d1)));
sb.append(min).append('\n');

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken()), c = Integer.parseInt(st.nextToken());
            double d1 = (double)(b-a), d2 = (double)(c-a)/2, d3 = (double)(c-b);
            //System.out.println(d1 + " " + d2 + " " + d3);
            if(d1 == d2) {
                sb.append("0.0").append('\n');
                continue;
            }
            double min = Double.MAX_VALUE;
            min = Math.min(min, Math.abs(a - (b - d3)));
            min = Math.min(min, Math.abs(b - (a + d2)));
            min = Math.min(min, Math.abs(c - (a + 2*d1)));
            sb.append(min).append('\n');
        }
        
        br.close();
        System.out.print(sb);
    }
}

'알고리즘(백준 등) 공부' 카테고리의 다른 글

SWEA 5684. [Professional] 운동  (0) 2026.04.30
SWEA 17937. 큰 수의 최대공약수  (0) 2026.04.30
SWEA 18799. 평균의 평균  (0) 2026.04.29
SWEA 19003. 팰린드롬 문제  (0) 2026.04.28
SWEA 19004. 점프 놀이  (0) 2026.04.28