PS/BaekJoon

2751 JAVA 수 μ •λ ¬ν•˜κΈ° 2

chaerlo127 2024. 2. 4. 01:33
728x90
 

2751번: 수 μ •λ ¬ν•˜κΈ° 2

첫째 쀄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” μˆ˜κ°€ 주어진닀. 이 μˆ˜λŠ” μ ˆλŒ“κ°’μ΄ 1,000,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€. μˆ˜λŠ” μ€‘λ³΅λ˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net

πŸ€ 문제

N개의 μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 이λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ€ μž…λ ₯

첫째 쀄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” μˆ˜κ°€ 주어진닀. 이 μˆ˜λŠ” μ ˆλŒ“κ°’μ΄ 1,000,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€. μˆ˜λŠ” μ€‘λ³΅λ˜μ§€ μ•ŠλŠ”λ‹€.

πŸ€ 좜λ ₯

첫째 쀄뢀터 N개의 쀄에 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ κ²°κ³Όλ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

πŸ€ 예제 μž…λ ₯ 1

5
5
4
3
2
1

πŸ€ 예제 좜λ ₯ 1

1
2
3
4
5

πŸ€ μ½”λ“œ κ³Όμ •

ν‹€λ¦° μ½”λ“œ 1

μ²˜μŒμ— HashMap μ„ μ‚¬μš©ν•˜λ €κ³ ν–ˆλ‹€. μžλ™μœΌλ‘œ 정렬이 λ˜λŠ” 쀄 μ•Œκ³  μžˆμ—ˆλŠ”λ°, HashMap이 μ•„λ‹ˆλΌ Heap μ΄ μžλ™μ •λ ¬μ„ μ§€μ›ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€. μžλ°”λŠ” Heap을 λ‚΄μž₯ν•˜κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ 방법을 μ΄μš©ν•˜κ³ μž ν–ˆλ‹€.

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

public class Main{
    public static void main(String[] args) throws IOException{
        // μž…λ ₯
        HashMap<Integer, Integer> sMap = new HashMap<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n ; i ++){
            sMap.put(Integer.parseInt(br.readLine()), 0);
        }

        //좜λ ₯
        for (int key : sMap.keySet()){
            System.out.println(key);
        }
    }
}

ν‹€λ¦°μ½”λ“œ 2

ArrayListλ₯Ό μ΄μš©ν–ˆλ‹€. λ‚΄μž₯ ν•¨μˆ˜μΈ ArrayList.sort()λŠ” μ΅œμ†Œ O(nlongN)을 μ§€μ›ν•˜μ§€λ§Œ μ•…μ˜ 경우 O(N^2)λ₯Ό μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— O(N^2)이 λ˜μ§€ μ•ŠλŠ” 이 λ¬Έμ œμ—μ„œλŠ” μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ, Collections.sort()λ₯Ό μ΄μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€.

ν˜„μž¬ λ¬Έμ œλŠ” 2초의 μ‹œκ°„ μ œν•œμ΄ μžˆμœΌλ―€λ‘œ 총 2μ–΅λ²ˆμ˜ μ—°μ‚°λ§Œ μˆ˜ν–‰μ΄ κ°€λŠ₯ν•˜λ‹€.
ν•˜μ§€λ§Œ, ν˜„μž¬ N의 값은 10^6 μ΄λ―€λ‘œ 2μ΄ˆλ™μ•ˆμ˜ μ‹œκ°„λ™μ•ˆ O(N^2)일 경우 10^12번의 연산을 μ§„ν–‰ν•œλ‹€. λ”°λΌμ„œ, O(N)에 κ°€κΉκ²Œ μ ‘κ·Όν•΄μ•Όν•˜λŠ” 것이닀.

ν‹€λ¦°μ½”λ“œ 3

κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  μ‹œκ°„μ΄ˆκ³Όκ°€ 났닀. κ·Έ μ΄μœ λŠ” System.out.println이 StringBuilder 에 λΉ„ν•΄ μ‹œκ°„μ†Œμš”λŸ‰μ΄ 높은 κ²ƒμ΄μ—ˆλ‹€. λ”°λΌμ„œ λ³€κ²½ ν›„ μ΅œμ’… μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

μ΅œμ’… μ½”λ“œ

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

public class Main{
    public static void main(String[] args) throws IOException{
        // μž…λ ₯
        ArrayList<Integer> sArray = new ArrayList<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n ; i ++){
            sArray.add(Integer.parseInt(br.readLine()));
        }

        Collections.sort(sArray);
        
        StringBuilder sb = new StringBuilder();
        //좜λ ₯
        for (int value : sArray){
            sb.append(value).append('\n');
        }
        System.out.println(sb);
    }
}
728x90