๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

2565 - ์ „๊นƒ์ค„

๋ฌธ์ œboj.kr/2565
๋‚ ์งœ: 09/11 (์ˆ˜)
์„ฑ๊ณต์—ฌ๋ถ€: X [00:52:17]

 

 

์ „๊นƒ์ค„์ด ๊ต์ฐจํ•˜์ง€ ์•Š๋„๋ก ์ตœ์†Œ์˜ ์ „๊นƒ์ค„์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์™„์ „ํƒ์ƒ‰์ด๋‹ค. ๋ชจ๋“  ์ „๊นƒ์ค„์„ 1๊ฐœ, 2๊ฐœ, 3๊ฐœ, ..., n๊ฐœ๊นŒ์ง€ ์ œ๊ฑฐํ•˜๋ฉด์„œ ์ตœ์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ „๊นƒ์ค„์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 100๊ฐœ์ด๋‹ˆ๊นŒ ์ด ๋ฐฉ๋ฒ•์€ ์ „๊นƒ์ค„์„ ๊ณ ๋ฅด๋Š”๋ฐ์—๋งŒ 100C1 + 100C2 + 100C3 + ... + 100C100๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๊ฐ€์žฅ ํฐ ๊ฒฝ์šฐ์˜ ์ˆ˜์ธ 100C50๊ฐ€ ์•ฝ 1 * 10^29์ด๋ฏ€๋กœ ์ด ๋ฐฉ๋ฒ•์€ ์•ˆ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ๊ต์ฐจํ•˜๋Š” ์ˆ˜๊ฐ€ ๋งŽ์€ ์ „๊นƒ์ค„ ์œ„์ฃผ๋กœ ์—†์• ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์˜ˆ์ œ๋ฅผ ๊ฐ€์žฅ ๋งŽ์€ ์ „๊นƒ์ค„์„ ๊ต์ฐจํ•˜๋Š” ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด,

 

1 8

3 9

4 1

...

 

์ด๋Ÿฌ๋ฉด 0๊ฐœ์ธ ์ „๊นƒ์ค„์ด m์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๊ต์ฐจํ•˜๋Š” ์ „๊นƒ์ค„์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ๋งŒํ•ด๋„ n-mC1 + n-mC2 + ... + n-mCn-m ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ๋„ ๊ฒฐ๊ตญ ์œ„์˜ ์™„ํƒ๊ณผ ๋‹ค๋ฅผ๋ฐ” ์—†์–ด์ง„๋‹ค. ์•„์˜ˆ ์ƒ๊ฐ์„ ๋’ค์ง‘์–ด ์ „๊นƒ์ค„์„ ๊ต์ฐจํ•˜์ง€ ์•Š๊ณ  ์ตœ๋Œ€๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ „๊นƒ์ค„ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•„ ์ „์ฒด ์ „๊นƒ์ค„ ๊ฐœ์ˆ˜์—์„œ ๋นผ๋ฉด ๋‹ต์ด์ง€ ์•Š์„๊นŒ?

 

๊ทธ๋ฆผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ต์ฐจํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

(1, 8), (3, 9), (10, 10)

(2, 2), (6, 4), (7, 6), (9, 7), (10, 10)

(4, 1), (6, 4), (7, 6), (9, 7), (10, 10)

 

์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์„ ๋ชจ๋‘ ์‚ดํŽด๋ณด๋ฉด ์ •๋ ฌ๋œ A๋ฅผ ๊ธฐ์ค€์œผ๋กœ B๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š”๊ฑด ๊ต์ฐจํ•˜์ง€ ์•Š๊ณ  ์ตœ๋Œ€๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์ด๋ฏ€๋กœ ๊ฒฐ๊ตญ ์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ๋œ A๋ฅผ ๊ธฐ์ค€์œผ๋กœ B๊ฐ€ LIS์ธ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

 

 

์ฝ”๋“œ

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int n = Integer.parseInt(br.readLine());

        int[][] cable = new int[n][2];
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            cable[i][0] = Integer.parseInt(st.nextToken());
            cable[i][1] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(cable, (Comparator.comparingInt(o -> o[0])));

        int[] lis = new int[n];
        lis[0] = cable[0][1];
        int idx = 0;
        for (int i = 1; i < n; i++) {
            if (cable[i][1] > lis[idx]) lis[++idx] = cable[i][1];
            else {
                int low = -1;
                int high = idx;

                while (low + 1 < high) {
                    int mid = (low + high) / 2;

                    if (lis[mid] >= cable[i][1]) high = mid;
                    else low = mid;
                }

                lis[high] = cable[i][1];
            }
        }

        int ret = 0;
        for (int i = 0; i < n; i++) if (lis[i] != 0) ret++;

        System.out.println(n - ret);
    }
}