[백준] 1940 주몽

문제링크 : https://www.acmicpc.net/problem/1940

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net

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

public class BOJ1940 {
    static int n, m, res;
    static int[] arr;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        m = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        arr = new int[n];
        for (int i=0; i<n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);

        int start = 0;
        int end = n-1;
        while (start<end){
            int temp = arr[start]+arr[end];
            if (temp == m){
                res ++;
                start ++;
                end --;
            }else if (temp < m){
                start ++ ;
            }else{
                end --;
            }
        }
        System.out.println(res);
    }
}

 

해설 : 배열 정렬 이후, 양 끝단에서 조건에 따라 포인터값을 변경해주면 된다.

두 수의 합이 같으면 갑옷이 만들어지는 것이므로, res++을 해준 후 양 포인터를 한칸씩 당겨준다.

그 외의 조건은 코드를 참조하면 된다.

'Algorithm > Java' 카테고리의 다른 글

[백준] 1253 좋다  (0) 2024.03.09
[백준] 2234 성곽  (0) 2024.03.09
[백준] 1806 부분합  (1) 2024.03.04
[백준] 2504 괄호의 값  (0) 2024.02.22
[백준] 2258 정육점  (0) 2024.02.17