JAVA/Coding Test

[JAVA] 백준 3273 두 수의 합_투포인터

오늘도개발 2024. 6. 4. 19:06

 

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

 

 

접근 : 

 

 - 들어온 배열을 오름차순으로 정렬한다.

 

 - 좌측과 우측 끝에 포인터를 두고 두 수의 합이 x가 되는지 확인한다. 만약 x 보다 작다면 left 를 1 올리고 크다면 right를 1 내린다.

 

 - 좌측과 우측 포인터가 만나기 직전까지 수행한다.

 

 

코드구현 

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

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());
        List<Integer> nums = new ArrayList<>(100_000);

        String[] temp = br.readLine().split(" ");        

        for(int i = 0; i < n ; i++) nums.add(Integer.parseInt(temp[i]));

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

        Collections.sort(nums);
        int left = 0;
        int right = n-1;
        int answer = 0;

        while(left < right){
            if(nums.get(left) + nums.get(right) == m){
                answer++;
                left++;
                continue;
            }
            if(nums.get(left) + nums.get(right) < m){
                left++;
                continue;
            }
            right--;
        }
        
        System.out.println(answer);
        br.close();
    }
}