알고리즘

백준 1253번 좋다 (JAVA)

박카스마시며코딩 2023. 12. 9. 17:58

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

 

1253번: 좋다

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

www.acmicpc.net

 

저는 2중 for문을 통해 풀었습니다.

저는 입력값 + 입력값 = 입력값 (좋은수) 이기 때문에 이를 입력값(좋은수) - 입력값 = 입력값으로 생각했습니다.

그래서 해당 입력값이 있는지를 확인하여 문제를 풀었습니다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Test {

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

    private static int cal(int[] num, int n) {
//        Arrays.sort(num);
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0 ; i < n ; i++){
            map.merge(num[i],1,(v1,v2)->{
                return v1+1;
            });
        }
        int cnt = 0;
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < n ; j++){
                if(i == j){
                    continue;
                }
                int tempNum = num[i] - num[j];
                if(map.containsKey(tempNum)){
                    int tempCnt = map.get(tempNum);
                    if(num[i] == tempNum){
                        tempCnt--;
                    }
                    if(num[j] == tempNum){
                        tempCnt--;
                    }
                    if(tempCnt > 0){
                        cnt++;
                        break;
                    }
                }
            }
        }
        return cnt;
    }


}