[백준] 1253 좋다

문제링크 : https://www.acmicpc.net/problem/1253

 

1253번: 좋다

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

www.acmicpc.net

import java.io.*;
import java.util.*;

public class BOJ1253 {
    static int n, cnt;
    static int[] arr;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        arr = new int[n];
        for (int i=0; i<n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);

        for (int i=0; i<n; i++){
            binarySearch(arr[i], i);
        }
        System.out.println(cnt);
    }
    static void binarySearch(int x, int idx){
        int start = 0;
        int end = n-1;
        while (start<end){
            if (start == idx){
                start++;
                continue;
            } else if (end == idx) {
                end--;
                continue;
            }
            int sum = arr[start]+arr[end];
            if (x == sum){
                cnt ++;
                return;
            } else if (x > sum) {
                start++;
            } else {
                end--;
            }
        }
    }
}

해설 : 정렬 후 투포인터를 이용해서 풀이. 풀이 시 주의해야할 점은 좋은 수를 구할때 자기자신이 더해지는 경우는 포함하면 안된다는 것이다.

함수에 인덱스 번호를 같이 넘겨주어, start와 end가 인덱스 번호가 같으면 한칸씩 땡겨서 다시 탐색하는 방식으로 구현하였다.

'Algorithm > Java' 카테고리의 다른 글

[백준] 14658 하늘에서 별똥별이 빗발친다  (0) 2024.03.14
[백준] 19941 햄버거 분배  (0) 2024.03.11
[백준] 2234 성곽  (0) 2024.03.09
[백준] 1940 주몽  (1) 2024.03.06
[백준] 1806 부분합  (1) 2024.03.04