본문 바로가기

알고리즘 풀이(JAVA)/백준

[백준] 문제번호 3273 (두 수의 합)(java)

<문제 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);
   }
}