‡ CODING TEST STUDY ‡/º 백준
[백준 | Java Silver IV] (#1940) 주몽
Trudy | 송연
2024. 8. 12. 22:51
문제
https://www.acmicpc.net/problem/1940
접근
투포인터를 사용해서 풀 수 있었던 문제이다.
두 재료의 합이 m이 되는 개수를 찾아야 한다.
따라서 주어진 배열을 먼저 정렬하고, start과 end로 가장 앞과 뒤에 포인터를 두고, 두개의 합이 m보다 작다면 end를 증가시켜주고, m보다 크다면 start를 감소시켜서 m 값을 찾아가도록 한다.
그렇게 start과 end의 위치가 교차되어 순서가 바뀌는 순간 while문을 종료되고, count를 출력한다.
최종 코드
package week14.baek.august13.baek;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class S1940 {
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 start = 0;
int end =n-1;
int sum = 0;
int count = 0;
while(start < end){ // start 포인터가 end보다 더 커진다면 종료
sum = arr[start] + arr[end];
if(sum < m){
//아직 작다면 시작 포인터를 증가 시킴
start++;
} else if(sum==m){
start++;
end--;
count++;
} else{
// 크다면 마지막 포인터를 감소
end--;
}
}
System.out.println(count);
}
}