inblog logo
|
Gyeongwon's blog
    Algorithm

    [알고리즘 코테 #6] 좋다

    도경원's avatar
    도경원
    Sep 04, 2025
    [알고리즘 코테 #6] 좋다
    Contents
    문제입력출력예제 입력 1예제 출력 1코드회고

    문제

    N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
    N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
    수의 위치가 다르면 값이 같아도 다른 수이다.

    입력

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

    출력

    좋은 수의 개수를 첫 번째 줄에 출력한다.

    예제 입력 1

    10 1 2 3 4 5 6 7 8 9 10

    예제 출력 1

    8

    코드

    import java.util.*; import java.io.*; public class Main { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int result = 0; long[] A = new long[N]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i=0; i<N; i++) { A[i] = Long.parseLong(st.nextToken()); } Arrays.sort(A); for(int k=0; k<N; k++) { long find = A[k]; int i=0; int j=N-1; // 투 포인터 알고리즘 while (i < j) { if(A[i] + A[j] == find) { // find가 서로 다른 두 수의 합인지 체크하기 if (i != k && j != k) { result++; break; } else if(i == k) { i++; } else if(j == k) { j--; } } else if(A[i] + A[j] < find) { i++; } else { j--; } } } System.out.println(result); br.close(); } }

    회고

    ❗
    투 포인터 알고리즘을 활용해서 풀면 간단하게 풀 수 있다.
    Share article
    Contents
    문제입력출력예제 입력 1예제 출력 1코드회고

    Gyeongwon's blog

    RSS·Powered by Inblog