๊ธฐ๋ก๋ฐฉ

BOJ_1253 : ์ข‹๋‹ค ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1253 : ์ข‹๋‹ค

Soom_1n 2022. 9. 24. 18:39

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1253๋ฒˆ: ์ข‹๋‹ค

์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 2,000), ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Ai๊ฐ€ N๊ฐœ ์ฃผ์–ด์ง„๋‹ค. (|Ai| ≤ 1,000,000,000, Ai๋Š” ์ •์ˆ˜)

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ์ˆ˜์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ’์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ์ˆ˜์ด๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • N์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ’ 2,000์ด๋ผ ๊ฐ€์ •ํ•ด๋„ ์ข‹์€ ์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” N^2๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค.
      (N^2 ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์‹œ N๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” N^3๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ)
    • ์ข‹์€ ์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ O(nlongn)์ด์–ด์•ผ ํ•œ๋‹ค. ์ •๋ ฌ๊ณผ ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
      • ๋‹จ, ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ์ข‹์€ ์ˆ˜ ๋งŒ๋“ค๊ธฐ์— ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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());
        long arr[] = new long[n];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++)
            arr[i] = Long.parseLong(st.nextToken());

        Arrays.sort(arr);

        int answer = 0;
        for (int k = 0; k < n; k++){ // arr[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){ // ์ž๊ธฐ ์ž์‹ ์€ ์ œ์™ธํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์—ฌ์•ผ ํ•จ(์œ„์น˜๋งŒ ๋‹ฌ๋ผ๋„ ๋จ)
                        answer++;
                        break;
                    } else if (i == k) i++;
                    else if (j == k) j--;
                } else if (arr[i] + arr[j] < find) i++;
                else j--;
            }
        }
        System.out.println(answer);
        br.close();
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ •๋ ฌํ•œ๋‹ค. N์€ ์ตœ๋Œ€ 10์–ต์ด๋ฏ€๋กœ N๊ณผ arr๋ฅผ longํ˜•์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.
  • ํˆฌ ํฌ์ธํ„ฐ i, j๋ฅผ ๋ฐฐ์—ด arr ์–‘์ชฝ ๋์— ์œ„์น˜์‹œํ‚ค๊ณ  ํˆฌ ํฌ์ธํ„ฐ ์ด๋™ ์›์น™์„ ํ™œ์šฉํ•ด ํƒ์ƒ‰ํ•œ๋‹ค.
    • A[i] + A[j] > K : j--;
    • A[i] + A[j] < K : i++;
    • A[i] + A[j] == K : i++; j--; count++;
  • arr์˜ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ N-1 ๊นŒ์ง€ ํˆฌ ํฌ์ธํ„ฐ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ํˆฌ ํฌ์ธํ„ฐ๊ฐ€ ์ž๊ธฐ์ž์‹ (K) ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๋„ ๊ณ„์‚ฐ์ด ์•ˆ๋˜๊ณ  ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์•ผํ• ์ง€ ๊ฐ์ด ์•ˆ์žกํ˜€์„œ ๊ต์žฌ๋ฅผ ๋ณด๋ฉด์„œ ํ’€์ดํ–ˆ๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” n์˜ ์ตœ๋Œ€๊ฐ’์— ์—ฐ์‚ฐํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณฑํ•ด์„œ 1์–ต์ด 1์ดˆ์ผ๋•Œ ๋„˜์–ด๊ฐ€๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.
    • ํˆฌ ํฌ์ธํ„ฐ๋Š” ์•„์ง ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋” ์—ฐ์Šต์ด ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค.
  • ํƒœ๊ทธ๋ฅผ ๋ณด๋‹ˆ ์ด๋ถ„ ํƒ์ƒ‰์ด๋‚˜ ํ•ด์‹œ๋ฅผ ์ด์šฉํ•ด์„œ๋„ ํ’€์ด๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_2581 : ์†Œ์ˆ˜  (0) 2022.09.29
BOJ_4673 : ์…€ํ”„ ๋„˜๋ฒ„  (0) 2022.09.28
BOJ_1940 : ์ฃผ๋ชฝ  (0) 2022.09.24
BOJ_2018 : ์ˆ˜๋“ค์˜ ํ•ฉ 5  (0) 2022.09.24
BOJ_10986 : ๋‚˜๋จธ์ง€ ํ•ฉ  (0) 2022.09.23