Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Floyd
- 백트래킹
- upperbound
- Dijkstra
- dp
- 시뮬레이션
- 카카오
- 이진트리
- 플로이드워셜
- 조합
- PriorityQueue
- BFS
- 부분집합
- 트라이
- 우선순위큐
- 자료구조
- dfs
- 다익스트라
- Union Find
- 세그먼트트리
- 구현
- Django
- 비트마스킹
- 순열
- 그리디
- 재귀
- LowerBound
- 회원가입
- 투포인터
- 이분탐색
Archives
- Today
- Total
J
[JAVA] BOJ 백준 2470 두 용액 본문
전체 코드
import java.io.*;
import java.util.*;
public class 두용액 {
static int[] numbers;
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
numbers = new int[N];
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
for(int i=0; i<N; i++){
numbers[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(numbers); // 정렬
int answer1 = numbers[0], answer2 = numbers[1];
int start = 0; int end = N-1;
while(start<end){
if(Math.abs(numbers[start]+numbers[end]) < Math.abs(answer1+answer2)){
answer1 = numbers[start];
answer2 = numbers[end];
}
if(numbers[start]+numbers[end] < 0) start++;
else if(numbers[start]+numbers[end] > 0) end--;
else break;
}
System.out.println(answer1+" "+answer2);
}
}
투 포인터를 사용하였다.
answer1, answer2 변수에 최솟값을 만드는 두 용액을 저장해주었다.
두 값이 갱신되는 때는 용액의 합의 절댓값이 최솟값보다 작은 경우이다.
두 용액의 합이 0보다 작다면 값을 키워주어야 0에 가까워진다. 그러므로 start를 증가시킨다.
반대로 크다면 값을 줄이기 위해 end를 줄인다.
마지막으로 합이 0이라면 더 이상 0에 가까워질 수 없으므로 루프를 바로 빠져나온다.
'🔑 Problem Solving > 🍇 BOJ' 카테고리의 다른 글
[JAVA] BOJ 백준 2842 집배원 한상덕 (0) | 2023.07.24 |
---|---|
[JAVA] BOJ 백준 16472 고냥이 (0) | 2023.07.24 |
[JAVA] BOJ 백준 14725 개미굴 (2) | 2023.05.10 |
[JAVA] BOJ 백준 5052 전화번호 목록 (0) | 2023.05.10 |
[JAVA] BOJ 백준 1941 소문난 칠공주 (0) | 2023.04.12 |
Comments