Java

[백준 3273] 두 수의 합 (JAVA)

iheeeee6-6 2023. 5. 6. 13:12
728x90

https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

이중 포문으로 하면 되지~ 생각했다가 역시나 시간초과 였다,, ㅎㅎㅎ

투 포인터를 사용해서 해결할 수 있는 문제였다.

1. 정렬

2. 양 끝의 번호를 더해서 해당 값이 이루어지는 지 확인하고 

더 작다면 앞번호+1 , 더 크다면 뒷번호-1을 하여 반복한다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class test3273 {
	static int n;
	static int[] arr;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		arr = new int[n];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		Arrays.sort(arr);
		int number = Integer.parseInt(br.readLine());
		int result = 0;
		int start =0;
		int end=n-1;
		while(start<end) {
			if(arr[start]+arr[end]==number) {
				result++;
				end--;
			}else if(arr[start]+arr[end]<number) {
				start++;
			}else {
				end--;
			}
		}
		System.out.println(result);

	}

}

 

 

'Java' 카테고리의 다른 글

[백준 1527] 금민수의 개수 (JAVA)  (0) 2023.05.12
[백준 1644] 소수의 연속합 (JAVA)  (0) 2023.05.07
[백준 1300] K번째 수 (JAVA)  (0) 2023.05.05
[백준 1238] 파티 (JAVA)  (0) 2023.05.04
[백준 2580] 스도쿠 (JAVA)  (0) 2023.05.03