본문 바로가기

알고리즘 자료구조/백준

[백준]1253 좋다

728x90

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

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

🖊️문제

N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.

N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.

수의 위치가 다르면 값이 같아도 다른 수이다.

 

 

🖊️문제풀이

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        int count = 0;
        long arr[] = new long[n];
        StringTokenizer st = new StringTokenizer(bf.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Long.parseLong(st.nextToken());
        }

        Arrays.sort(arr);
        for (int i = 0; i < n; i++) {
            long find = arr[i];
            int start = 0;
            int end = n-1;

            while (start<end){
                if(arr[start] + arr[end] == find){
                    if(start != i && end != i){
                        count++;
                        break;
                    }else if(i==start){
                        start++;
                    }else{
                        end--;
                    }
                }else if(arr[start] + arr[end] < find){
                    start++;
                }else{
                    end--;
                }
            }
        }

        System.out.println(count);
        bf.close();
    }
}

투포인터를 이용하여 문제 풀이

728x90

'알고리즘 자료구조 > 백준' 카테고리의 다른 글

[백준] 2164 카드2  (0) 2023.08.30
[백준] 1874 스택 수열  (0) 2023.08.29
[백준] 1940 주몽  (0) 2023.08.15
[백준]2018 수들의 합 5  (0) 2023.08.15
[백준]11659 구간 합 구하기 4  (0) 2023.08.10