새소식

반응형
250x250
Baekjoon/Gold

[백준] 투 포인터 - 1253_좋다 Java[자바]

  • -
728x90
반응형

 

이번 문제는 살짝 헤맸다..

 

먼저 어떤 식으로 풀어갈지 생각을 하고나서 풀었어야 했는데 

너무 무턱대고 문제부터 풀어서 생각이 잠시 멈췄나보다..ㅎ

 

어찌어찌 책을 참고하며 풀었다.

 

일단 이번 문제도 투 포인터 방식으로 푸는 문제였다.

 

먼저 주어진 숫자를 배열에 넣은 뒤 오름차순 정렬을 해주는 것부터가 시작이다.

 

그리고 반복문을 돌며 배열에서 하나의 값을 찾아낸 뒤 

 

투 포인터로 두 숫자의 합과 같은 것을 고르면 된다.

 

여기서 중요한 점은 투 포인터에 해당하는 인덱스가 처음 고른 인덱스와 같으면 

 

서로 다른 두 수의 합이 아니므로 주의해야한다.

 

필자는 여기서 헤맸다..ㅎㅎ

 

아래 코드를 한번 보자

 

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

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());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] numArr = new int[N];
        for(int i = 0; i < N; i++) {
            numArr[i] = Integer.parseInt(st.nextToken());
        }
        int count = 0;
        Arrays.sort(numArr);
        for(int k = 0; k < N; k++) {
            int i = 0;
            int j = N - 1;
            int found = numArr[k];
            while(i < j) {
                if(numArr[i] + numArr[j] < found) {
                    i++;
                } else if(numArr[i] + numArr[j] > found) {
                    j--;
                } else {
                    if(i != k && j != k) {
                        count++;
                        break;
                    } else if(i == k) {
                        i++;
                    } else {
                        j--;
                    }
                }
            }
        }
        System.out.println(count);
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.