반응형
문제
주어진 값들 중에서 2개를 뽑아서 더해 M값이 되는 경우의 수를 모두 구해라
풀이
배열을 정렬해서 작은 값과 큰 값을 움직이는 start와 end값을 이동시켜 해답을 찾아간다.
1.start와 end값의 합이 M보다 크다면 end값을 낮춘다.
2.start와 end값의 합이 M보다 작다면 start값을 높인다.
3.만약 M과 같다면 start와 end를 동시에 이동한다.
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());
int M = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] S = new int[N];
for(int i=0; i< N; i++){
S[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(S);
int answer = 0;
int start = 0;
int end = N-1;
int sum;
while(start < end){
sum = S[start] + S[end];
if(sum < M) start++;
else if(sum > M) end--;
else{
start++;
end--;
answer++;
}
}
System.out.println(answer);
}
}
결과
반응형
'백준' 카테고리의 다른 글
[JAVA] 백준 1253 투포인터 (1) | 2024.01.15 |
---|---|
[JAVA] 백준 2018 투포인터 (0) | 2024.01.15 |
[JAVA] 백준 10986 (1) | 2024.01.14 |
[JAVA] 백준 11660 누적합 (0) | 2024.01.14 |
[JAVA] 백준 11659 누적합 (0) | 2024.01.14 |