백준 1253번 (정렬 및 투 포인터)

김경욱·2025년 10월 12일

백준

목록 보기
99/121

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.net.Inet4Address;
import java.util.*;

import static java.util.Collections.*;

public class Main {

public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int N = Integer.parseInt(br.readLine());

    StringTokenizer st = new StringTokenizer(br.readLine());

    int[] numbers = new int[N];

    for (int i = 0 ; i < N; i++)
    {
        numbers[i] = Integer.parseInt(st.nextToken());
    }

    Arrays.sort(numbers);


    int sum = 0;
    int count = 0;



    for (int i = 0 ; i < N; i++)
    {
        int k = numbers[i];
        int end = N-1;
        int start = 0;




        while(start < end) {

            if (start == i) start++;
            if (end == i) end--;

            if (start >= end)
            {
                break;
            }

            sum = numbers[start] + numbers[end];

            if (sum == numbers[i]) {
                count++;
                break;
            } else if (sum < numbers[i]) {
                start++;

            } else if (sum > numbers[i]) {
                end--;
            }
        }



    }

    System.out.println(count);






}
}

이전에 풀었던 방식으로 연결해서 투 포인터 방식으로 풀었다. 이 문제에서 중요한 점은
if (start == i) start++;
if (end == i) end--;
이 부분이다. 배열에서 start,end가 i의 값으로 모두 수렴할 경우에는 이 경우를 제외시켜야 한다. 그래서 그러한 경우가 발생하지 않게 이러한 코드를 넣어야 했다. 예외 케이스를 생각해야 해서 골드문제인 것 같다.

0개의 댓글