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
'알고리즘 > 투포인터' 카테고리의 다른 글
[백준][JAVA] 7453번 합이 0인 네 정수 (0) | 2024.03.10 |
---|---|
[백준][JAVA] 2230번 수 고르기 (0) | 2024.02.21 |
[백준][JAVA] 20922번 겹치는 건 싫어 (1) | 2024.02.18 |
[백준][JAVA] 2531번 회전 초밥 (0) | 2024.01.09 |