Live Today

[백준] 1253. 좋다 (Java) 본문

알고리즘/백준 문제풀이

[백준] 1253. 좋다 (Java)

ilivetoday 2023. 1. 25. 23:53
반응형

https://www.acmicpc.net/problem/1253

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

  • 선형 시간으로 알고리즘을 풀 수 있게 만들어 줌
  • 연속적인 값들을 이용해 푸는 문제에 적합
  • 정렬 후 풀이

✅ 정답 풀이

package algo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main_bj_1253_좋다 {

    static int N,result;
    static int[] arr;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        N = Integer.parseInt(br.readLine());
        arr = new int[N];
        st = new StringTokenizer(br.readLine());
        for(int i=0;i<N;i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        } // input end

        Arrays.sort(arr);

        for(int i=0;i<N;i++) {
            int left = 0;
            int right = N-1;

            while(true) {
                if(left == i) left++;
                else if(right == i) right--;

                if(left >= right) break;

                if(arr[left] + arr[right] > arr[i]) right--;
                else if(arr[left] + arr[right] < arr[i]) left++;
                else {
                    result++;
                    break;
                }
            }
        }

        System.out.println(result);
    }

}