본문 바로가기

백준/정렬

백준 1940 자바

반응형

 

백준 정렬 문제이고 두 포인터를 사용해야 합니다.

배열을 오름차순으로 정렬한 뒤에 배열의 처음 인덱스, 끝 인덱스를 가지고 움직이면서 원하는 합이 되면 cnt를 1 올리는 방식입니다.

 

1. 큰 틀은 두 원소의 합이 M보다 작을 때 클 때 같을 때로 나눕니다.

2. M보다 작다면 start를 1 올려서 작은 수부터 그 다음 원소로 올라가게 합니다.

3. M보다 크다면 end를 1 낮춰서 큰 수부터 그 아래 원소로 내려가게 합니다.

4. 그 밖의 경우라면 같다는 뜻이니 cnt를 1 올리고 start는 올리고 end는 낮춥니다.

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());

        int M = Integer.parseInt(br.readLine());
        int[] arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int cnt = 0;
        int start = 0;
        int end = arr.length-1;

        Arrays.sort(arr);

        while (start < end) {
            if(arr[start] + arr[end] < M) {
                start++;
            } else if( arr[start] + arr[end] > M) {
                end--;
            } else {
                start++;
                cnt++;
                end--;
            }
        }
        System.out.println(cnt);
    }
}
반응형

'백준 > 정렬' 카테고리의 다른 글

백준 10825 자바 (2)  (0) 2022.10.10
백준 5635 자바  (0) 2022.08.26
백준 1269 자바  (0) 2022.08.21
백준 11728 자바  (0) 2022.08.21
백준 11650 자바  (0) 2022.08.21