BOJ_2473_세 용액_java
2023. 2. 7. 20:46ㆍAlgorithm/BOJ
728x90
https://www.acmicpc.net/problem/2473
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 |