알고리즘

백준 3273번 두 수의 합 (JAVA)

박카스마시며코딩 2023. 11. 27. 17:52

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

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 

저는 투 포인트를 통해 문제를 해결하였습니다.

먼저 입력을 정렬하고, 양 끝에 포인터로 가리키고, 이 합이 x보다 작다면 start포인터를 늘려 합을 늘리고, 합이 x보다 크다면 end포인터를 줄여 합을 줄였습니다. 같다면 start, end 포인터 둘 다 움직여 몇쌍의 합이 x인지를 판단하였습니다.

 

 

package BOJ.twopoint;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_3272 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] input = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < n ; i++){
            input[i] = Integer.parseInt(st.nextToken());
        }
        int targetNumber = Integer.parseInt(br.readLine());
        int result = cal(input,targetNumber,n);
        System.out.println(result);
    }

    private static int cal(int[] input, int targetNumber, int n) {
        Arrays.sort(input);
        int startIndex = 0;
        int endIndex = n-1;
        int cnt = 0;
        while(startIndex < endIndex){
            int sum = input[startIndex] + input[endIndex];
            if(sum == targetNumber){
                startIndex++;
                endIndex--;
                cnt++;
                continue;
            }
            if(sum < targetNumber){
                startIndex++;
                continue;
            }

            if(sum > targetNumber){
                endIndex--;
                continue;
            }
        }
        return cnt;
    }
}

'알고리즘' 카테고리의 다른 글

백준 7568번 덩치 (JAVA)  (0) 2023.11.29
백준 2343번 기타 레슨 (JAVA)  (0) 2023.11.28
백준 1141번 접두사 (JAVA)  (0) 2023.11.26
백준 12100번 2048 (JAVA)  (1) 2023.11.25
백준 14503번 로봇 청소기 (JAVA)  (0) 2023.11.24