문제링크 : https://www.acmicpc.net/problem/1940
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 |