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

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


1. ๋ฌธ์ œ

์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด ๋œ๋‹ค. ์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚จ์€ ์ผ์˜ ์–‘ ์›์†Œ๋“ค์„ ๊ฐ๊ฐ ์ œ๊ณฑํ•ด์„œ ๋”ํ•œ ๊ฐ’์ด๋‹ค.

works ๋ฐฐ์—ด์— ์ผ์˜ ์–‘์ด ์ฃผ์–ด์ง€๊ณ  1์‹œ๊ฐ„์— 1๋งŒํผ์˜ ์ผ์„ ํ•œ๋‹ค๊ณ  ํ•  ๋•Œ,

N์‹œ๊ฐ„ ๋™์•ˆ ์ผ์„ ์ฒ˜๋ฆฌํ–ˆ์„ ๋•Œ ์•ผ๊ทผ ํ”ผ๋กœ๋„์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

2. ํ’€์ด

์ฒ˜์Œ์—” ์ˆ˜ํ•™์œผ๋กœ ์ ‘๊ทผํ•˜์˜€์œผ๋‚˜, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด '์ตœ์†Œํ•œ'์˜ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.

๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์›์†Œ๋ฅผ ๋ชจ๋‘ ์ •๋ ฌํ•˜์—ฌ ๊ฑฐ๊ธฐ์„œ N์‹œ๊ฐ„ ๋งŒํผ์„ ๋นผ์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๋•Œ๋ฌธ์— ์ตœ์†Œํž™์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ reverseํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

1. works ์›์†Œ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ pq์— ๋„ฃ์–ด์ค€๋‹ค.

2. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ pq์—์„œ ๋งจ ์•ž์˜ ์›์†Œ๋ฅผ N๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ poll() ํ•ด์ค€๋‹ค.

3. pollํ•œ ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ, ์ตœ๋Œ“๊ฐ’์ด 0์ด๋ž€ ์˜๋ฏธ์ด๊ณ  ๋’ค์— ๋‚จ์€ ์›์†Œ๋“ค ๋˜ํ•œ ๋ชจ๋‘ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ

๋” ๋ณผ ๊ฒƒ๋„ ์—†์ด ๋ฐ”๋กœ 0์„ returnํ•ด์ค€๋‹ค.

4. ๋‚จ์•„์žˆ๋Š” ์›์†Œ๊ฐ’๋“ค์— ๋Œ€ํ•ด ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ํ›„ returnํ•ด์ค€๋‹ค.

 

3. ์ฝ”๋“œ

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

class Solution {
    public long solution(int n, int[] works) {
        long ans = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<> ((o1,o2)->o2-o1);
        
        for (int work:works) {
            pq.offer(work);
        }
        
        for (int i=0; i<n; i++) {
            int num = pq.poll();
            if (num <= 0) {
                return 0;
            }
            pq.offer(num-1);
        }
        
        while (!pq.isEmpty()) {
            ans += Math.pow(pq.poll(), 2);
        }
        
        return ans;
    }
}

4. ์‚ฌ๋‹ด

์ฒœ์ฒœํžˆ ํ•˜๋‚˜์”ฉ ์Œ“์•„ ๋‚˜๊ฐ€๋ฉด ์–ธ์  ๊ฐ„ ๋ฐ˜๋“œ์‹œ ๋„์ฐฉํ•ด์žˆ์„๊ฑฐ๋ผ ๋ฏฟ๋Š”๋‹ค.. ๋‚˜๋„ ์‹ค๋ ฅ์ด ๋งŽ์ด ๋Š˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. ๊ทธ๋Ÿด๋ ค๋ฉด ๋” ์—ด์‹ฌํžˆํ•ด์•ผ์ง€ ์ž ์„ ์™œ ์ž ์ผ์–ด๋‚˜