Algorithm/백준 문제풀이

[백준] 1253 좋다 - Java

너지살 2023. 9. 15. 14:53

 

 

문제 출저

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 baekjoon.backjoon9.day15;

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

/*
좋다
https://www.acmicpc.net/problem/1253
 */
public class B1253 {

    static int n;
    static int[] board;

    static int answer;

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

        Arrays.sort(board);

        answer = 0;
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < n; i++) {
            int target = board[i];
            int s = 0;
            int e = n-1;

            while(s < e) {
                int sum = board[s] + board[e];

                if(sum == target) {
                    if(s == e) {
                        s++;
                    }
                    else if(s == i) {
                        s++;
                    }
                    else if(e == i) {
                        e--;
                    }
                    else {
                        answer++;
                        break;
                    }
                }

                if(sum > target) {
                    e--;
                }
                else if(sum < target) {
                    s++;
                }
            }
        }

        sb.append(answer);
        System.out.println(sb);

    }


}