[백준] 실버3 두 수의 합 JAVA

2025. 3. 27. 16:31코테공부/문제풀이

문제

투 포인터의 기본 문제이다.

 

풀이 방법

- 풀이 시간 : 5분

 

투 포인터를 이용해 양쪽에서 탐색 시작해 진행하면 된다.

arr = [1, 2, 3, 5, 7, 9, 10, 11, 12]
       ↑                          ↑
      left                      right

1 + 12 = 13 → 정답! → result++ -> right--

위와 같이 target을 찾으면 right--를 해주어야한다. 어차피 정렬되어있기 때문에 다음 정답을 찾기위해선 left나 right의 인덱스 위치를 바꿔주어야한다.

 

추가적으로 arr[left] + arr[right] < target 이면 더 큰값을 더해주어야 하기때문에 left++, 반대라면 더 작은 값을 더해주어야 하기때문에 right--를 진행한다.

 


코드(JAVA)

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

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[] arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int left = 0;
        int right = N-1;

        int target = Integer.parseInt(br.readLine());

        Arrays.sort(arr);

        int count = 0;
        while(true){
            if(left >= right){
                break;
            }
            if(arr[left] + arr[right] == target){
                count++;
                right--;
            }else if(arr[left] + arr[right] < target){
                left++;
            }else if(arr[left] + arr[right] > target){
                right--;
            }
        }

        System.out.println(count);
    }
}

 

결과

'코테공부 > 문제풀이' 카테고리의 다른 글

[코드트리] 보도블럭  (0) 2025.04.02