BOJ_2473_세 용액_java

2023. 2. 7. 20:46Algorithm/BOJ

728x90

https://www.acmicpc.net/problem/2473

 

2473번: 세 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상

www.acmicpc.net

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

/**
 백준 2473번 세 용액
 골드 3
 */
public class BOJ_2473_세용액 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine()); // 용액의 수
        int[] characteristicValue = new int[N]; // 각 용액의 특성값
        long[] ansList;
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i<N; i++){
            characteristicValue[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(characteristicValue); // 오름차순 정렬

        ansList = solution(characteristicValue , N);
        System.out.println(characteristicValue[(int) ansList[0]] + " " + characteristicValue[(int)ansList[2]] + " " + characteristicValue[(int)ansList[1]]);
    }

    public static long[] solution(int[] arr, int N){
        long[] ansList = new long[3]; // start end mid
        if (arr[0] >=0){ // 모든 수가 양수인 경우
            ansList[0] = 0;
            ansList[1] = 2;
            ansList[2] = 1;
        }else if(arr[N-1] <=0){ // 모든 수가 음수인 경우
            ansList[0] = N-3;
            ansList[1] = N-1;
            ansList[2] = N-2;
        }else{
            long nearValue = Long.MAX_VALUE;// 0에 가장 근접한 값 변수
          	// 값 1개 고정(시작점) 후 2개의 값 찾기
            for (int start = 0; start<N; start++){ // 가장 작은 값
                int mid = start+1; // 중간 값
                int end = N-1; // 가장 큰 값

                while (mid < end){
                    long sum = arr[start] + arr[mid] + arr[end];
                    if (Math.abs(sum) < nearValue){
                        nearValue = Math.abs(sum);
                        ansList[0] = start;
                        ansList[1] = end;
                        ansList[2] = mid;
                    }
                    if (sum > 0) end--;
                    else mid++;
                }
            }
        }
        return ansList;
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ_7579_앱_java  (0) 2023.02.09
BOJ_4386_별자리 만들기_java  (0) 2023.02.08
BOJ_2623_음악프로그램_java  (0) 2023.02.05
BOJ_1005_ACM Craft_java  (0) 2023.02.05
BOJ_2252_줄 세우기_java  (0) 2023.02.05