Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

[λ°±μ€€ BOJ / JAVA] λ©€ν‹°λ²„μŠ€ β…‘ (18869번)
πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄/BOJ_λ°±μ€€

[λ°±μ€€ BOJ / JAVA] λ©€ν‹°λ²„μŠ€ β…‘ (18869번)

2023. 12. 27. 12:49

πŸ“˜ 1. 문제 μ†Œκ°œ

 

18869번: λ©€ν‹°λ²„μŠ€ β…‘

M개의 μš°μ£Όκ°€ 있고, 각 μš°μ£Όμ—λŠ” 1λΆ€ν„° NκΉŒμ§€ λ²ˆν˜Έκ°€ 맀겨진 행성이 N개 μžˆλ‹€. ν–‰μ„±μ˜ 크기λ₯Ό μ•Œκ³  μžˆμ„λ•Œ, κ· λ“±ν•œ 우주의 쌍이 λͺ‡ κ°œμΈμ§€ ꡬ해보렀고 ν•œλ‹€. κ΅¬μ„±μ΄ 같은데 μˆœμ„œλ§Œ λ‹€λ₯Έ 우주의 쌍

www.acmicpc.net

 

πŸ“˜ 2. 풀이

🧡 1. μ’Œν‘œ μ••μΆ•

  문제의 ν¬μΈνŠΈλŠ” μ’Œν‘œ 압좕이닀.

  μ’Œν‘œ μ••μΆ•μ΄λž€ μ’Œν‘œ 값듀을 μž‘μ€ λ²”μœ„μ˜ κ°’μœΌλ‘œ μ••μΆ•ν•˜λŠ” 것이닀. 수의 κ°’에 μƒκ΄€μ—†μ΄ μˆ˜μ˜ λŒ€μ†Œκ΄€κ³„λ§Œ μ•Œλ©΄ λ  λ•Œ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€.

 

  -100, -4, 0, 3, 5000μ΄λΌλŠ” μ’Œν‘œκ°€ μžˆλ‹€κ³  ν•΄λ³΄μž. 이λ₯Ό λ°°μ—΄μ²˜λŸΌ ν‘œμ‹œν•œλ‹€λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

-100 ... -4 ... 0 ... 3 ... 5000
쑴재   쑴재   쑴재   쑴재   쑴재

  ν•˜μ§€λ§Œ 압좕을 μ΄μš©ν•˜μ—¬ λŒ€μ†Œκ΄€κ³„λ§Œ νŒŒμ•…ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆλ‹€.

μ’Œν‘œ μ••μΆ• κ°’ 0 1 2 3 4
μ‹€μ œ κ°’ -1000 -4 0 3 5000

  μ’Œν‘œ 압좕을 μ΄μš©ν•˜μ—¬ 기쑴에 ν•„μš”ν–ˆλ˜ -100 ~ 5000κΉŒμ§€μ˜ 곡간을 0 ~ 4κΉŒμ§€μ˜ κ³΅κ°„μœΌλ‘œ 쀄일 수 μžˆλ‹€.

🧡 2. 풀이

  μ’Œν‘œ 압좕을 μ΄ν•΄ν–ˆλ‹€λ©΄ 문제의 풀이법을 μ‰½κ²Œ 생각할 수 μžˆλ‹€. 두 μš°μ£Όκ°€ κ· λ“±ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ²°κ΅­ μ’Œν‘œ μ••μΆ•λœ 값이 μΌμΉ˜ν•˜λ©΄ λœλ‹€.

  2개의 μš°μ£Όμ— μ†ν•˜λŠ” ν–‰μ„±μ˜ 크기가 각각 '1 3 2', '12 50 31이라고 ν•΄λ³΄μž. 각 우주λ₯Ό μ’Œν‘œ μ••μΆ•ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

  • 1 3 2 → 1 3 2
  • 12 50 31 → 1 3 2

  μ’Œν‘œ μ••μΆ• 값이 κ°™μœΌλ―€λ‘œ κ²°κ΅­ 두 μš°μ£ΌλŠ” κ· λ“±ν•˜λ‹€κ³  ν•  수 μžˆλ‹€.

  μ’Œν‘œ μ••μΆ• κ°’κ³Ό κ· λ“± μš°μ£Όμ— λŒ€ν•œ 이해가 μ–΄λ ΅λ‹€λ©΄ μΈμ ‘ν•œ 값듀을 λΆ€λ“±ν˜Έλ‘œ λ‚˜νƒ€λ‚Έ 경우λ₯Ό 생각해 보자. '< < = >'와 '< < = >'λŠ” κ· λ“± 우주고, '< > >'와 '> < <'λŠ” κ· λ“± μš°μ£Όκ°€ μ•„λ‹ˆλ‹€.

🧡 3. μ‹œκ°„λ³΅μž‘λ„

  μ’Œν‘œ 압좕을 ν•  λ•Œ 이뢄탐색을 μ΄μš©ν•΄μ•Ό ν•œλ‹€. 이뢄 탐색을 μ΄μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν•˜λ‚˜μ˜ 우주의 행성듀을 μ’Œν‘œ μ••μΆ•ν•˜λŠ”λ° N^2의 μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.

  반면 이뢄 탐색을 μ΄μš©ν•˜κ²Œ 되면 NlogN이 μ†Œμš”λœλ‹€. ν–‰μ„±(N개)을 μ΄λΆ„탐색(logN)을 μ΄μš©ν•˜μ—¬ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ„ μˆ˜ μžˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

πŸ“˜ 3. μ½”λ“œ

public class Main {

    static int  N, M;
    static int[][] nums, compressedNums;
    static String[] ss;
    static List<Integer>[] sortedNums;

    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        ss = in.readLine().split(" ");
        M = Integer.parseInt(ss[0]);
        N = Integer.parseInt(ss[1]);
        nums = new int[M][N];
        sortedNums = new ArrayList[M];

        for(int i = 0; i < M; i++) {
            Set<Integer> set = new HashSet<>();

            ss = in.readLine().split(" ");
            for(int j = 0; j < N; j++) {
                int num = Integer.parseInt(ss[j]);
                nums[i][j] = num;
                set.add(num);
            }

            // 이뢄탐색을 μœ„ν•œ μ •λ ¬λœ ν–‰μ„± μ €μž₯
            sortedNums[i] = new ArrayList<>(set);
            Collections.sort(sortedNums[i]);
        }

        // μ’Œν‘œ μ••μΆ•
        compressedNums = new int[M][N];
        for(int i = 0; i < M; i++) {
            for(int j = 0; j < N; j++) {
                // 이뢄 탐색 이용
                compressedNums[i][j] = Collections.binarySearch(sortedNums[i], nums[i][j]);
            }
        }

        // 우주의 μ’Œν‘œ μ••μΆ• 값듀을 λΉ„κ΅ν•˜μ—¬ μš°μ£Όκ°€ κ· λ“±ν•œμ§€ ν™•μΈν•œλ‹€
        int cnt = 0;
        for(int i = 0; i < M; i++) {
            for(int j = i + 1; j < M; j++) {
                if(Arrays.equals(compressedNums[i], compressedNums[j]))
                    cnt++;
            }
        }

        System.out.println(cnt);
    }
}

'πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ > BOJ_λ°±μ€€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€ BOJ / JAVA] 두 λ°°μ—΄μ˜ ν•© (2143번)  (1) 2023.12.29
[λ°±μ€€ BOJ / JAVA] κ΄„ν˜Έμ˜ κ°’ (2504번)  (1) 2023.12.26
BOJ 14865 - 곑선 자λ₯΄κΈ° [JAVA]  (0) 2023.02.28
    'πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄/BOJ_λ°±μ€€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [λ°±μ€€ BOJ / JAVA] 두 λ°°μ—΄μ˜ ν•© (2143번)
    • [λ°±μ€€ BOJ / JAVA] κ΄„ν˜Έμ˜ κ°’ (2504번)
    • BOJ 14865 - 곑선 자λ₯΄κΈ° [JAVA]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”