<문제 3273 - 두 수의합>
- 투포인터 풀이 문제
[문제]
[답안]
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int p1 = 0;// 포인터 1 처음에서 시작
int p2 = n -1; // 포인터 2 끝에서부터 시작
int cnt = 0; //쌍의 수를 구할 값
int sum = 0; // p1 + p2의 합계로 쓸 변수
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt(); // 수열의 크기만큼 수 받아주기
}
Arrays.sort(arr); // 배열 정렬
int target = sc.nextInt(); // 찾으려는 값 받기
while (p1 < p2){ // 반복문을 돌면서
sum = arr[p1] + arr[p2]; // sum = p1 + p2
if (sum > target){ // 만약 찾는값보다 sum이 크면
p2--; // 포인터 2 왼쪽으로 이동
} else if (sum < target) { // 만약 찾는 값보다 sum이 작으면
p1++; // 포인터 1 오른쪽으로 이동
} else {
p2--; // 포인터 2 왼쪽으로 이동
p1++; // 포인터 1 오른쪽으로 이동
cnt++; // cnt 증가
}
}
System.out.println(cnt);
}
}
'알고리즘 풀이(JAVA) > 백준' 카테고리의 다른 글
[백준] 문제번호 11721(열 개씩 끊어 출력하기)(java) (2) | 2023.01.19 |
---|---|
[백준] 문제번호 10817 (세 수)(java) (0) | 2023.01.17 |
[백준] 문제번호 10870 (피보나치 수5)(java) (0) | 2022.10.13 |
[백준] 문제번호 3986 (좋은 단어)(java) (0) | 2022.10.11 |
[백준] 문제번호 1463 (가장 긴 증가하는 부분 수열)(java) (0) | 2022.10.07 |