๐Ÿ’ก Algorithm

[Java] ๋‘ ์ˆ˜์˜ ํ•ฉ - ํˆฌ ํฌ์ธํ„ฐ (Lv. Sliver3)

jcowwk 2025. 2. 22. 17:35

๋‘ ์ˆ˜์˜ ํ•ฉ - ํˆฌ ํฌ์ธํ„ฐ (Lv. Sliver3)


1. ๋ฌธ์ œ

2. ํ’€์ด


1. ๋ฌธ์ œ

https://www.acmicpc.net/problem/3273

 

2. ํ’€์ด

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

public class Main {
    public static int two_pointer(int N, int[] a, int x) {
        int result = 0;
        int left = 0;
        int right = N-1;
        int sum = 0;

        Arrays.sort(a);
        
        while (left < right) {
            sum = a[left] + a[right];
            
            if (sum == x) {
                result++;
                left++;
                right--;
            } else if (sum < x) {
                left++;
            } else {
                right--;
            }
        }

        return result;
    }
    
    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[] a = new int[N];
        for (int i = 0; i < N; i++) {
            a[i] = Integer.parseInt(st.nextToken());
        }

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

        System.out.println(two_pointer(N, a, x));
    }
}

 

Arrays.sort(a); ๋ฅผ ํ†ตํ•ด a ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ •๋ ฌ ํ•ด์ค๋‹ˆ๋‹ค. 

 

1 2 3 4 5 6 7 8
left             right

 

์œ„์™€ ๊ฐ™์ด left๋Š” a ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  right๋Š” a ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ left ๋Š” ์ฆ๊ฐ€๋ฅผ ํ†ตํ•ด์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ right๋Š” ๊ฐ์†Œ๋ฅผ ํ†ตํ•ด์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ํ•ฉ์„ ๊ตฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ•˜๊ฒŒ ๋˜๋ฉด (2, 4) (4, 2) ์ฒ˜๋Ÿผ ์ค‘๋ณต ์Œ์„ ์ œ์™ธํ•œ ์Œ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1 2 3 4 5 6 7 8
  left         right  

 

 ํ˜„์žฌ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์˜ ํ•ฉ์ด x ๋ณด๋‹ค ์ž‘์„ ๋•Œ๋Š” ์ž‘์€ ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์˜ฌ๋ ค์„œ ๊ฐ’์„ ์˜ฌ๋ ค์ฃผ๊ณ , x ๋ณด๋‹ค ํด ๋•Œ๋Š” ํฐ ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ ค์„œ ๊ฐ’์„ ๋‚ฎ์ถฐ์ค๋‹ˆ๋‹ค.

 

1 2 3 4 5 6 7 8
left     left, right        

 

while๋ฌธ์„ ๋Œ๋ฉด์„œ ์ธ๋ฑ์Šค๋“ค์ด ํ•œ ์ง€์ ์—์„œ ์„œ๋กœ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ์ข…๋ฃŒ๋˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋ฉ๋‹ˆ๋‹ค.


๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3