새소식

반응형
250x250
Baekjoon/Silver

[백준] 투 포인터 - 1940_주몽 Java[자바]

  • -
728x90
반응형

 

이번 문제는 투 포인터로 풀면 쉽게 풀 수 있는 문제이다.

 

먼저 고유한 번호들을 오름차순으로 정렬시킨다.

 

그 후 처음에 포인트 한 개, 마지막에 포인트 한 개를 두고 그 합을 M과 비교를 하면 된다.

 

start와 end 포인트가 있다고 가정해보자.

 

arr[start] + arr[end] > M 이면 오름차순이므로 end--를 해준다.

 

그 반대의 경우라면 start++를 해준다.

 

만약 두 수의 합이 M과 같다면 count++와 함께 start++, end--를 같이 해준다.

 

아래 코드를 보자.

 

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

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[] arr = new int[N];
        for(int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        int i = 0;
        int j = N - 1;
        int count = 0;
        while(i < j) {
            if(arr[i] + arr[j] > M) {
                j--;
            } else if(arr[i] + arr[j] < M) {
                i++;
            } else {
                count++;
                i++;
                j--;
            }
        }
        System.out.println(count);
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.