728x90
전형적인 투포인터 문제 였다. 잔디심기용으로 제격!
<문제 풀이/접근과정>
1. 각 끝에서 시작
2. 합보다 클경우 오른쪽 포인터를 --, 합보다 작은 경우 왼쪽 포인터를 ++
3. 합과 같을 경우 왼쪽 ++, 오른쪽 ++
4. 왼쪽 포인터 < 오른쪽포인터 일 때까지 반복
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Boj_3273 {
public static void main(String[] args) throws NumberFormatException, IOException {
// 1 2 3 4
// 1 2 3 5 7 10 11 12
// O O O O
// 1. 각 끝에서 시작
// 2. 합보다 클경우 오른쪽 포인터를 --, 합보다 작은 경우 왼쪽 포인터를 ++
// 3. 합과 같을 경우 왼쪽 ++, 오른쪽 ++
// 4. 왼쪽 포인터 < 오른쪽포인터 일때까지 반복
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer stz = new StringTokenizer(br.readLine());
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(stz.nextToken());
}
int target = Integer.parseInt(br.readLine());
Arrays.sort(arr);
int left = 0;
int right = n-1;
int cnt = 0;
while(left < right) {
int sumV = arr[left] + arr[right];
if(sumV < target) {
left++;
}else if(sumV == target) {
cnt++;
left++;
right--;
}else {
right--;
}
}
System.out.println(cnt);
}
}
728x90
'알고리즘공부(Algorithm Study) > 문제풀이(ProblemSolving)' 카테고리의 다른 글
백준 13549 java - 숨바꼭질 3(BFS) (0) | 2022.05.06 |
---|---|
백준 2470 java - 두 용액(투 포인터) (0) | 2022.05.05 |
백준 1504 java - 특정한 최단 경로(최적화된 다익스트라) (2) | 2022.05.04 |
백준 2914 java - 저작권 (0) | 2022.05.03 |
백준 2178 java - 미로탐색 (0) | 2022.05.01 |
댓글