코테/백준

[백준/JAVA] 1253번: 좋다

imname1am 2023. 4. 3. 22:04
반응형

🔺 문제

 

1253번: 좋다

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

www.acmicpc.net

🔺 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        var br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        long[] arr = new long[N];
        int cnt = 0;

        var st = new StringTokenizer(br.readLine()," ");
        for(int i = 0 ; i < N ; i++) {
            arr[i] = Long.parseLong(st.nextToken());
        }

        Arrays.sort(arr);

        for(int k = 0 ; k < N ; k++) {
            long find = arr[k]; // 찾고자 하는 값
            int i = 0;
            int j = N - 1;

            // 투 포인터 알고리즘
            while(i < j) {
                if(arr[i] + arr[j] == find) {
                    // 서로 다른 두 수의 합인지 확인
                    if(i != k && j != k)  {
                        cnt++;
                        break;
                    }
                    else if(i == k) {
                        i++;
                    }
                    else if(j == k) {
                        j--;
                    }
                }
                else if(arr[i] + arr[j] < find) {
                    i++;
                }
                else {
                    j--;
                }
            }
        }
        System.out.println(cnt);
        br.close();
    }
}
✅ 해결 아이디어
- 투 포인터 알고리즘 (두 포인터 위치 : 양 끝!)
- 찾고자하는 값(find)을 배열의 원소에서 하나하나 살펴봄.
- 투 포인터 알고리즘 돌리는 동안, k가 서로 다른 두 수의 합인지 확인하는 조건문 필요 (28-37번째 줄)

누적합 구하는 거 아니면 두 포인터 위치는 양 끝으로 잡고 하면 되는갑다!

고로 투 포인터 두 지점은 앞으로 분리해놓고 시작하는걸로..

 

암튼 이제 투 포인터 문제 감은 잡혔다! 이제 남은 것은 복습뿐,,,


🔺 다른 풀이들

 

[BOJ] 1253번: 좋다 (Java)

1253번: 좋다배열의 값들을 하나씩 돌며, 투 포인터를 사용하여 해당 수가 좋은지 판별하였다.문제에 나와있는 예시가 너무 자명하기 때문에 아래 예시로 생각하고 문제를 풀었다.기본적으로 정

velog.io

 

[백준] 1253번 좋다 (JAVA)

투 포인터를 이용한 문제다. 투 포인터를 둘다 시작 지점으로 놨더니 생각할게 너무 많아지고, 시간복잡도도 증가했다. 투포인터를 시작지점, 끝점으로 양쪽으로 옮겨서 구현했더니 간단하게

komas.tistory.com

반응형