https://www.acmicpc.net/problem/2467
괜시리 브루트포스로 한번 풀어보고 싶어지는 문제이다.
당연히 틀리고 min값을 이정표로 투포인터를 지정했다가 또 틀렸다. 방향성은 맞는 것 같은데 왜 틀렸는가 장정 일주일 동안 고민 끝에 min값이 아니라 이전 계산값을 기준으로 포인터를 움직여야 한다는 것을 깨달았다.
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br;
static StringTokenizer st;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] array = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
array[i] = Integer.parseInt(st.nextToken());
twoPoint(array);
System.out.println(array[curA] + " " + array[curB]);
}
static int curA = 0, curB = 0, min = Integer.MAX_VALUE;
static void twoPoint(int[] array) {
int pStart = 0, pEnd = array.length - 1, tmp;
while (true) {
if (pStart >= pEnd)
return;
tmp = array[pStart] + array[pEnd];
if (Math.abs(tmp) < Math.abs(min)) {
min = tmp;
curA = pStart;
curB = pEnd;
}
if (tmp < 0) {
pStart++;
} else if (tmp > 0) {
pEnd--;
} else
return;
}
}
}
'Algorithm > 문제' 카테고리의 다른 글
[백준 / JAVA] 2166. 다각형의 면적(G5) (0) | 2024.11.22 |
---|---|
[백준 / JAVA] 10942. 팰린드롬?(G4) (0) | 2024.11.22 |
[백준 / JAVA] 1238. 파티(G3) (0) | 2024.11.03 |
[백준 / JAVA] 1916. 최소비용 구하기(G5) (0) | 2024.11.03 |
[백준 / JAVA] 2638. 치즈(G3) (0) | 2024.10.26 |