본문 바로가기
알고리즘/투포인터

[백준][JAVA] 1940번 주몽

by 박뀨뀨 2024. 1. 5.
 

1940번: 주몽

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

www.acmicpc.net

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

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()); // 재료의 개수(1~15000)
		int M = Integer.parseInt(br.readLine()); // 값옷을 만드는데 필요한 수(1~10000000)
		
		int[] arr = new int[N]; // N개의 고유 번호 저장할 배열

		StringTokenizer st = new StringTokenizer(br.readLine()); // N개의 재료들이 가진 고유한 번호들이 공백을 사이에 두고 주어짐
		
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr);
		
		int left = 0, right = N - 1, answer = 0;
		while (left < right) {
			if (arr[left] + arr[right] < M) {
				left++;
			} else if (arr[left] + arr[right] > M) {
				right--;
			} else {
				answer++;
				left++;
			}
		}

		System.out.println(answer);
	}

}

설명

N개의 번호들이 중복되지 않고 고유하기 때문에 배열을 정렬한 다음 투포인터 알고리즘을 사용하여 개수를 세주면 문제해결이 가능하다.

728x90