Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 20366번 같이 눈사람 만들래? (gold 3 본문
import java.io.*;
import java.util.*;
//세용액 비슷한 느낌. 먼저 두개를 택해서 하나의 눈사람 만들기 투포인터로 최대한 근접하게 만들기.
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.valueOf(br.readLine());
StringTokenizer st=new StringTokenizer(br.readLine());
int[] num=new int[n+1];
for(int i=1; i<=n; i++){
num[i]=Integer.valueOf(st.nextToken());
}
//투포인터 사용해야하므로 정렬.
Arrays.sort(num);
int min=Integer.MAX_VALUE;
//두개를 택하고 투 포인터로 근접하게.
for(int i=1; i<=n; i++){
int saveN1=num[i];
int temp=0;
num[i]=-1;
for(int j=i+1; j<=n; j++){
temp=saveN1+num[j];
int saveN2=num[j];
num[j]=-1;
int start=1;
int end=n;
int sum=0;
while(start<end){
//만약, start, end의 초기값이 -1인 경우에
//각 -1 판별이 뒤에 있다면, 이 경우를 무시하지 못함.
//따라서 앞에서 판별하는 것이 맞다.
if(num[start]==-1){
start++;
continue;
}
else if(num[end]==-1){
end--;
continue;
}
sum=num[start]+num[end];
int dif=Math.abs(sum-temp);
min= min > dif ? dif :min;
if(sum==temp){
min=0;
break;
}
else if(sum<temp){
start++;
}
else{
end--;
}
}
num[j]=saveN2;
}
num[i]=saveN1;
}
System.out.println(min);
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 2528번 사다리 (gold 3 (2) | 2024.05.22 |
---|---|
[백준] 15684번 사다리 조작 (gold 3 (0) | 2024.05.22 |
[백준] 14431번 소수마을 (gold 3 (0) | 2024.05.21 |
[백준] 2482번 색상환 (gold 3 (0) | 2024.05.20 |
[백준] 2109번 순회강연 (gold 3 (0) | 2024.05.20 |