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

김경욱·2025년 10월 12일

백준

목록 보기
98/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());

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

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

    int[] ingre = new int[N];


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

   Arrays.sort(ingre);


    int start = 0;
    int end= N-1;
    int count = 0;
    int total = 0;



    while(start < end)
    {



            total = ingre[start]+ingre[end];

            if (total > M)
            {
                end--;
            }
           else  if (total == M)
            {
                count++;
                end--;
                start++;
            }
            else{
                start++;
            }






    }

    System.out.println(count);










}
}

입력받은 배열을 오름차순으로 정렬 후 투 포인터를 이용한다. 투 포인터는 시작지점을 맨 앞 끝나는 지점을 맨 뒤로 정한 후 끝에서부터 하나씩 줄어들다가 값이 구하려는 값보다 작아지면 시작지점을 1씩 증가하는 방향으로 구하는 문제이다. 맨 처음에 브루트 포스로 구할려고 했지만 시간초과가 발생하여 결국에는 투 포인터로 구하였다.

0개의 댓글