우보천리 개발

[백준1253] 좋다 Java 본문

알고리즘/Do it! 알고리즘 코딩테스트

[백준1253] 좋다 Java

밥은답 2023. 8. 13. 23:14
반응형

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

 

1253번: 좋다

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

www.acmicpc.net

 

package Chapter1;

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

public class BJ1253 {
    public static void main(String[] args) throws IOException, NumberFormatException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] 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 counter = 0;

        for (int i=0; i<n; i++) {
            int sum = arr[i];
            int lp = 0;
            int rp = n-1;

            while (lp < rp) {
                // 우리가 찾는 값이면, 자기 자신인지 확인
                if (arr[lp] + arr[rp] == sum) {
                    if (i == lp) lp++;
                    else if (i == rp) rp--;
                    else {
                        counter++;
                        break;
                    }
                }

                // 찾는 값이 아님
                if (arr[lp] + arr[rp] > sum) {
                    rp--;
                }
                else if (arr[lp] + arr[rp] < sum) {
                    lp++;
                }
            }
        }

        System.out.println(counter);
    }
}

 

서로 다른 두 수가 sum(찾는 값) 이여야 하기 때문에 아무리 찾는 값이라도 자기 자신과 같은 숫자인지 확인을 해야하는

추가 과정이 필요하다.

반응형
Comments