[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] - ์„œ๋ฒ„ ์ฆ์„ค ํšŸ์ˆ˜

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

์„œ๋ฒ„ ์ฆ์„ค ํšŸ์ˆ˜
์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์„œ๋ฒ„ ์ฆ์„ค ํšŸ์ˆ˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
school.programmers.co.kr

๐Ÿ’ก ๋ฌธ์ œ ํŒŒ์•…

  • 0์‹œ๋ถ€ํ„ฐ 23์‹œ๊นŒ์ง€ ์‹œ๊ฐ„๋Œ€๋ณ„ ์ด์šฉ์ž ์ˆ˜ players๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ์„œ๋ฒ„ ํ•œ ๋Œ€๋Š” ์ด์šฉ์ž m๋ช…์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ , ํ•œ ๋ฒˆ ์ฆ์„คํ•˜๋ฉด k์‹œ๊ฐ„ ๋™์•ˆ ์šด์˜๋œ ๋’ค ์ž๋™์œผ๋กœ ๋ฐ˜๋‚ฉ๋œ๋‹ค.
  • ๊ฐ ์‹œ๊ฐ„๋Œ€๋งˆ๋‹ค (์šด์˜ ์ค‘์ธ ์„œ๋ฒ„ ์ˆ˜) x m์ด ํ•ด๋‹น ์‹œ๊ฐ„๋Œ€ ์ด์šฉ์ž ์ˆ˜๋ณด๋‹ค ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„๋ฅผ ์ฆ์„คํ•ด์•ผ ํ•˜๋ฉฐ, ํ•˜๋ฃจ ๋™์•ˆ ํ•„์š”ํ•œ ์ตœ์†Œ ์ฆ์„ค ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ—๏ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • 0์‹œ๋ถ€ํ„ฐ 23์‹œ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ, ๊ฐ ์‹œ๊ฐ„๋Œ€์— ๋ฐ˜๋‚ฉ๋˜๋Š” ์„œ๋ฒ„์™€ ์ƒˆ๋กœ ์ฆ์„คํ•ด์•ผ ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์ฆ์„ค๋œ ์„œ๋ฒ„์˜ ๋ฐ˜๋‚ฉ ์‹œ๊ฐ(time + k)์„ ํ์— ์ €์žฅํ•ด๋‘๊ณ , ๋งค ์‹œ๊ฐ„๋Œ€ ์‹œ์ž‘๋งˆ๋‹ค ํ์˜ ๋งจ ์•ž๋ถ€ํ„ฐ ํ™•์ธํ•ด์„œ ๋ฐ˜๋‚ฉ ์‹œ๊ฐ <= ํ˜„์žฌ ์‹œ๊ฐ์ธ ์„œ๋ฒ„๋ฅผ ํ์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์šด์˜ ์ค‘์ธ ์„œ๋ฒ„ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
    • ํ์— ๋ฐ˜๋‚ฉ ์‹œ๊ฐ์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ์•ž๋งŒ ํ™•์ธํ•ด๋„ ๋ฐ˜๋‚ฉ ๋Œ€์ƒ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ˜๋‚ฉ ์ฒ˜๋ฆฌ ํ›„, ์šด์˜ ์ค‘์ธ ์„œ๋ฒ„ ์ˆ˜ x m์ด ํ˜„์žฌ ์ด์šฉ์ž ์ˆ˜ ์ดํ•˜์ธ ๋™์•ˆ ์„œ๋ฒ„๋ฅผ ํ•œ ๋Œ€์”ฉ ์ฆ์„คํ•œ๋‹ค.
    • ์ฆ์„คํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋‚ฉ ์‹œ๊ฐ์„ ํ์— ๋„ฃ๊ณ , ์šด์˜ ์ค‘์ธ ์„œ๋ฒ„ ์ˆ˜์™€ ์ „์ฒด ์ฆ์„ค ํšŸ์ˆ˜๋ฅผ 1์”ฉ ๋Š˜๋ฆฐ๋‹ค.
  • 24๊ฐœ ์‹œ๊ฐ„๋Œ€๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•œ ๋’ค ๋ˆ„์ ๋œ ์ฆ์„ค ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿงฉ ์ฝ”๋“œ ๊ตฌํ˜„

import java.util.*;

class Solution {
    public int solution(int[] players, int m, int k) {

        Queue<Integer> serverQ = new ArrayDeque<>();
        int runningServers = 1;
        int expansionCnt = 0;

        for (int time = 0; time <= 23; ++time) {
            int users = players[time];

            // ํ˜„์žฌ ์‹œ๊ฐ„๋Œ€์— ๋๋‚˜๋Š” ์„œ๋ฒ„ ์ œ๊ฑฐํ•˜๊ธฐ
            while (!serverQ.isEmpty() && serverQ.peek() <= time) {
                serverQ.poll();
                runningServers--;
            }

            // ํ˜„์žฌ ์„œ๋ฒ„๋กœ ์œ ์ € ๊ฐ๋‹น ๊ฐ€๋Šฅํ•œ ์ง€ ์ฒดํฌ
            while (runningServers * m <= users) {
                runningServers++;
                serverQ.offer(time + k);
                expansionCnt++;
            }
        }
        return expansionCnt;
    }
}