728x90
반응형
[백준 2470] 두 용액 (Java)
출처 : 링크
쉽게 생각하고 접근하다 큰 코 다쳤다;;
조합 → 시간초과
이중for문 → 시간초과
N의 수를 잘 체크하고 문제를 푸는 습관을 갖자..
ArrayList에 값을 담고, Sort한다
처음 값과 끝 값의 합을 미리 저장해두고, while문을 통해 시작과 끝의 인덱스 값을 증감해가며 최소값을 찾아간다
문제 풀 때는 용액의 값이 크길래 long으로 선언해서 풀었는데 10억이라 int형으로 풀어도 상관 없을 것 같다
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.StringTokenizer; public class Main_2470 { static long N; static ArrayList<Long> arr; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Long.parseLong(br.readLine()); arr = new ArrayList<>(); StringTokenizer st = new StringTokenizer(br.readLine(), " "); for (int i = 0; i < N; i++) { arr.add(Long.parseLong(st.nextToken())); } Collections.sort(arr); // 정렬 long min = arr.get(0) + arr.get(arr.size()-1); // 가장 작은 값 + 가장 큰 값 long s = 0; // 시작 long e = arr.size()-1; // 끝 long minI = s; long maxI = e; while(s < e) { long sum = arr.get((int) s) + arr.get((int)e); if(Math.abs(sum) < Math.abs(min)){ minI = s; maxI = e; min = sum; } if(sum < 0) s++; else e--; } System.out.println(arr.get((int) minI) + " " + arr.get((int) maxI)); } } | cs |
728x90
반응형
'Algorithm > 백준(BOJ)' 카테고리의 다른 글
[백준 16234] 인구 이동 (Java) (0) | 2019.03.25 |
---|---|
[백준 2839] 설탕 배달 (Java) (0) | 2019.03.24 |
[백준 2004] 조합 0의 개수 (Java) (0) | 2019.03.23 |
[백준 2503] 숫자 야구 (Java) (0) | 2019.03.23 |
[백준 3055] 탈출 (java, bfs) (0) | 2019.03.07 |