did_story

[๋ฐฑ์ค€ / JAVA] 11399๋ฒˆ, ATM (Greedy) ๋ณธ๋ฌธ

Algorithm๐ŸŒŠ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€ / JAVA] 11399๋ฒˆ, ATM (Greedy)

์–ด์ œ์‹œ์ž‘ 2024. 12. 24. 09:31


ํ’€์ด

์ƒ๊ฐํ•œ ์ ‘๊ทผ๋ฒ•์€ ‘๋Œ€๊ธฐ ์‹œ๊ฐ„์˜ ์ดํ•ฉ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ–ˆ๋‹ค.

  1. ์‚ฌ๋žŒ๋“ค์„ ์ธ์ถœ ์‹œ๊ฐ„์ด ์งง์€ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๋ฉด, ์ดํ›„ ์‚ฌ๋žŒ๋“ค์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์ตœ๋Œ€ ์‚ฌ๋žŒ ์ˆ˜๊ฐ€ 1000๋ช…์œผ๋กœ ์ •ํ•ด ์กŒ๊ธฐ์— Counting Sort๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์šฉ์ดํ•˜๋‹ค.
  3. → ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๊ตฌํ•˜๊ธฐ ์‰ฌ์› ๊ธฐ ๋•Œ๋ฌธ์—.

ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋ฐ‘ ์ฒ˜๋Ÿผ ๋  ๊ฒƒ์ด๋ฉฐ.

        int total_time = 0;
        int prev_time = 0;

        for (int i = 1; i < Max; i++) {
            while(person[i] --> 0){
                total_time += (i + prev_time);
                prev_time += i;
            }
        }

 

์ „์ฒด์ฝ”๋“œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋  ๊ฒƒ์ด๋‹ค.

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

public class Main {
    final static int Max = 1001;
    static int[] person;

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

        person = new int[Max];
        st = new StringTokenizer(br.readLine());

        // Counting sort!!!
        while(n --> 0){
            person[Integer.parseInt(st.nextToken())]++;
        }

        int total_time = 0;
        int prev_time = 0;

        for (int i = 1; i < Max; i++) {
            while(person[i] --> 0){
                total_time += (i + prev_time);
                prev_time += i;
            }
        }
        System.out.println(total_time);
    }
}