ν•΄λ²„λ‹ˆ 2023. 11. 9. 15:57
λ°˜μ‘ν˜•

 

 

 

문제

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

 

2217번: λ‘œν”„

N(1 ≤ N ≤ 100,000)개의 λ‘œν”„κ°€ μžˆλ‹€. 이 λ‘œν”„λ₯Ό μ΄μš©ν•˜μ—¬ 이런 μ €λŸ° 물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλ‹€. 각각의 λ‘œν”„λŠ” κ·Έ κ΅΅κΈ°λ‚˜ 길이가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ“€ 수 μžˆλŠ” 물체의 μ€‘λŸ‰μ΄ μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ„ μžˆλ‹€. ν•˜

www.acmicpc.net

 

 

 

 

 

 

 

 

 

 

 

 

 

 

풀이

 

예λ₯Ό λ“€μ–΄ λ‘œν”„κ°€ 10 20 20 30 이라면 

μ΅œμ†Œ 10일 λ•Œ μ΅œλŒ€ μ€‘λŸ‰ = 40

μ΅œμ†Œ 20일 λ•Œ μ΅œλŒ€ μ€‘λŸ‰ = 60

μ΅œμ†Œ 30일 λ•Œ μ΅œλŒ€ μ€‘λŸ‰ = 30

μ΄λ―€λ‘œ μ΅œλŒ“κ°’μ€ 60이고 μ΅œμ†Œ 20일 λ•Œμ΄λ‹€.

 

κ·Έλž˜μ„œ λ‘œν”„ 배열을 μ •λ ¬ν•΄μ€€ λ‹€μŒμ— μ΅œλŒ“κ°’μ„ ꡬ해쀬닀. 

package algorithm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

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

        // k개의 λ‘œν”„, μ€‘λŸ‰ w -> w/k 만큼 걸리게 λœλ‹€.
        // 이 λ‘œν”„λ“€μ„ μ΄μš©ν•˜μ—¬ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 물체의 μ΅œλŒ€ μ€‘λŸ‰
        // λ‘œν”„ λ‹€ μ•ˆ 써도 됨

        int num = Integer.parseInt(br.readLine());
        int[] arr = new int[num];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(arr);

        int max = arr[0] * arr.length;
        int currentMin = 0; // index

        // 10 20 20 30 μ΄λ ‡κ²Œ λ°°μ—΄ 정렬을 ν•΄μ£Όκ³  
        // 10일 λ•Œ μ΅œλŒ€ 40
        // 20일 λ•Œ μ΅œλŒ€ 60
        // 30일 λ•Œ μ΅œλŒ€ 30 μ΄λ―€λ‘œ 60좜λ ₯ 
        while (currentMin < arr.length - 1) {
            if (arr[currentMin] != arr[currentMin + 1]) {
                int currentMax = arr[currentMin + 1] * (arr.length - currentMin - 1);
                if (max < currentMax) {
                    max = currentMax;
                }
            }
            currentMin++;
        }

        // arr.length > 1 μΌλ•Œλ₯Ό μ•ˆ 썼음.. 길이 확인 ν•΄μ£ΌκΈ° 
        if (arr.length > 1 && (arr[arr.length - 1] != arr[arr.length - 2])) {
            if (max < arr[arr.length - 1]) {
                max = arr[arr.length - 1];
            }
        }

        System.out.println(max);
    }

}

 

 

 

 

 

 

 

 

 

μ •λ‹΅

 

 

 

 

 

 

λ°˜μ‘ν˜•