[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ 42586 (Level 2) - C++

2026. 1. 18. 01:24ยทAlgorithms/Problem Solving

๋ฌธ์ œ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/42586


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

๊ฐ ๊ธฐ๋Šฅ์€ ์ˆœ์„œ๋Œ€๋กœ ๊ฐœ๋ฐœ๋˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค.

  • ๊ธฐ๋Šฅ๋งˆ๋‹ค ํ˜„์žฌ ์ง„ํ–‰๋ฅ (progresses)๊ณผ ํ•˜๋ฃจ ๊ฐœ๋ฐœ ์†๋„(speeds)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ๋˜์–ด์•ผ๋งŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ๊ธฐ๋Šฅ์˜ ์ง„ํ–‰๋ฅ ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๋ฐฐํฌ ์‹œ์—๋Š” ์—ฐ์†๋œ ๊ธฐ๋Šฅ๋“ค๋งŒ ํ•จ๊ป˜ ๋ฐฐํฌ๋œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ


progres speed return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

๐Ÿ’ญ ์ฒ˜์Œ ์ ‘๊ทผ: “์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ์ฒ˜๋Ÿผ ์ˆœ๋ฒˆ์„ ๊ณ„์† ๋„˜๊ฒจ์•ผ ํ•˜๋„ค?”

๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ดค์„ ๋•Œ ๋– ์˜ฌ๋ฆฐ ์ƒ๊ฐ์€ ์ด๋žฌ๋‹ค.

  • ์ž‘์—…๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„œ ์žˆ์Œ
  • ์•ž ์ž‘์—…์ด ๋๋‚˜์•ผ ๋’ค ์ž‘์—…๋„ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • ๋งค์ผ ๋ชจ๋“  ์ž‘์—…์˜ ์ง„ํ–‰๋ฅ ์ด ์ฆ๊ฐ€ํ•จ

๐Ÿ‘‰ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ณ„์† ์ˆœํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ
๐Ÿ‘‰ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Queue๊ฐ€ ๋– ์˜ฌ๋ž๋‹ค.

๊ทธ๋ž˜์„œ “ํ•˜๋ฃจํ•˜๋ฃจ ์ง„ํ–‰์‹œํ‚ค๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค.


์ฒซ ๋ฒˆ์งธ ํ’€์ด (์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ๋ฐ˜)

#include <string>
#include <vector>
#include <queue> //์™œ ๊ผญ queue์—ฌ์•ผ ํ•˜๋Š”์ง€ ์ƒ๊ฐ
using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    queue<int> q;
    queue<int> s;
    //progresses๊ฐ€ ์ค„์–ด๋“ค๋ฉด speeds๋„ ์ค„์–ด๋“ฆ -> ๋ฐ˜๋ณตํšŸ์ˆ˜ ๋งค๋ฒˆ ๋‹ค๋ฆ„
    // ํ•œ ๋ฒˆ์˜ ์ˆœํšŒ๋Š” speeds์˜ ๊ฐœ์ˆ˜๋งŒํผ
    vector<int> answer;
    for(int i=0;i<progresses.size();i++){
        q.push(progresses[i]);
        s.push(speeds[i]);
    }
    int num;
    while(!q.empty()){
        num=0;
        int l=s.size();
        for(int j=0;j<l;j++){
            int spe= s.front();
            int tmp=q.front()+=spe;
            q.pop();
            s.pop();
            q.push(tmp);
            s.push(spe);
        }
        for(int j=0;j<l;j++){
        int t= q.front();
        if(t>=100){
            q.pop();
            s.pop();
            num++;
        }
        }
        if(num == 0) continue;
        answer.push_back(num);        
    }
    return answer;
}

๐Ÿ‘‰ ๊ฒฐ๊ณผ๋Š” ๋งž์•˜์ง€๋งŒ, ์†”์งํžˆ ๋งํ•ด “์‚ด์ง ๋•Œ๋ ค๋งž์ถ˜ ๋А๋‚Œ”์ด ๊ฐ•ํ–ˆ๋‹ค.


์™œ ์ด ๋ฌธ์ œ๊ฐ€ ํ(Queue) ๋ฌธ์ œ์ธ๊ฐ€?

1.  FIFO๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค

๋ฌธ์ œ์˜ ํ•ต์‹ฌ ์กฐ๊ฑด:

๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋จผ์ € ์™„์„ฑ๋ผ๋„,
์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋œ๋‹ค

 

์ฆ‰,

  • ์ˆœ์„œ๊ฐ€ ์ ˆ๋Œ€ ๋’ค๋ฐ”๋€Œ๋ฉด ์•ˆ ๋จ
  • ํ•ญ์ƒ ๋งจ ์•ž(front)๋งŒ ํ™•์ธํ•˜๋ฉด ๋จ

๐Ÿ‘‰ FIFO(First-In First-Out) ๊ตฌ์กฐ๊ฐ€ ์ •ํ™•ํžˆ ๋งž์•„๋–จ์–ด์ง„๋‹ค.


2. ์„ ๋‘(Front)์˜ ์ƒํƒœ๊ฐ€ ์ „์ฒด๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค

  • ์•ž ๊ธฐ๋Šฅ์ด 100%๊ฐ€ ์•„๋‹ˆ๋ฉด → ์•„๋ฌด๋„ ๋ฐฐํฌ ๋ถˆ๊ฐ€
  • ์•ž ๊ธฐ๋Šฅ์ด 100%๊ฐ€ ๋˜๋ฉด → ๋’ค์—์„œ ์—ฐ์†์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋งŒํผ ๋ฐฐํฌ

๐Ÿ‘‰ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ front๋งŒ ๊ด€์ฐฐํ•˜๋ฉด ๋œ๋‹ค.


3. ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ ๋งˆ์ธ๋“œ์…‹

์ฝ”ํ…Œ์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฅผ ๋•Œ ์Šค์Šค๋กœ์—๊ฒŒ ๋˜์ง€๋Š” ์งˆ๋ฌธ:

  1. ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ€์•ผ ํ•˜๋‚˜? → Queue
  2. ์ตœ๊ทผ ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‚˜? → Stack
  3. ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋งŽ๋‚˜? → Linked List
  4. ๋น ๋ฅธ ์กฐํšŒ๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€? → Hash(Map/Set)

๐Ÿ‘‰ ์ด ๋ฌธ์ œ๋Š”

“์ž‘์—…๋“ค์ด ์ค„ ์„œ ์žˆ๊ณ , ์•ž์‚ฌ๋žŒ์ด ์•ˆ ๋‚˜๊ฐ€๋ฉด ๋’ท์‚ฌ๋žŒ๋„ ๋ชป ๋‚˜๊ฐ„๋‹ค”
→ Queue๊ฐ€ ์ •๋‹ต


ํ˜„์žฌ ํ’€์ด์˜ ํ•œ๊ณ„

ํ˜„์žฌ ํ’€์ด๋Š” “ํ•˜๋ฃจํ•˜๋ฃจ ์‹œ๋ฎฌ๋ ˆ์ด์…˜” ๋ฐฉ์‹์ด๋‹ค.

  • ์ž‘์—…์ด 1% ๋‚จ๊ณ  ์†๋„๊ฐ€ 1์ด๋ฉด → 99๋ฒˆ ๋ฐ˜๋ณต
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์ด ๋งŽ์•„์ง

๐Ÿ‘‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง„๋‹ค


์‚ฌ๊ณ  ์ „ํ™˜: ์‹œ๋ฎฌ๋ ˆ์ด์…˜ → ์ˆ˜ํ•™์  ๋ชจ๋ธ๋ง

ํ•ต์‹ฌ ์•„์ด๋””์–ด

“๊ตณ์ด ํ•˜๋ฃจ์”ฉ ์ง„ํ–‰ํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?”
“๊ฐ ๊ธฐ๋Šฅ์ด ๋ฉฐ์น  ๋’ค์— ๋๋‚˜๋Š”์ง€๋งŒ ์•Œ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?”


์ตœ์ ํ™” ํฌ์ธํŠธ 1: ๋‚จ์€ ์ผ์ˆ˜ ๊ณ„์‚ฐ

  • ๋‚จ์€ ์ž‘์—…๋Ÿ‰: 100 - progresses[i]
  • ํ•˜๋ฃจ ์ž‘์—…๋Ÿ‰: speeds[i]
  • ํ•„์š”ํ•œ ์ผ์ˆ˜ (์˜ฌ๋ฆผ ์ฒ˜๋ฆฌ):
 
(99 - progresses[i]) / speeds[i] + 1

์ตœ์ ํ™” ํฌ์ธํŠธ 2: ์™„๋ฃŒ์ผ ๊ธฐ์ค€ ๋ฌถ๊ธฐ

  • ์•ž ๊ธฐ๋Šฅ์˜ ์™„๋ฃŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ
  • ๊ทธ๋ณด๋‹ค ๋นจ๋ฆฌ ๋๋‚˜๋Š” ๊ธฐ๋Šฅ์€ ํ•จ๊ป˜ ๋ฐฐํฌ

๊ฐœ์„ ๋œ ํ’€์ด (O(N))

 
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> days;

    // 1. ๋ชจ๋“  ๊ธฐ๋Šฅ์˜ 'ํ•„์š” ์ผ์ˆ˜'๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด์„œ ํ์— ๋„ฃ๊ธฐ
    for (int i = 0; i < progresses.size(); i++) {
        int day = (99 - progresses[i]) / speeds[i] + 1;
        days.push(day);
    }

    // 2. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐฐํฌ ๋ฌถ์Œ ๊ณ„์‚ฐ
    while (!days.empty()) {
        int current_deploy_day = days.front(); // ๊ธฐ์ค€์ด ๋˜๋Š” ์•ž์„  ๊ธฐ๋Šฅ์˜ ์™„์„ฑ์ผ
        days.pop();
        int count = 1;

        // ๊ธฐ์ค€์ผ๋ณด๋‹ค ๋นจ๋ฆฌ ๋๋‚˜๋Š” ๋’ค์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— pop
        while (!days.empty() && days.front() <= current_deploy_day) {
            days.pop();
            count++;
        }
        answer.push_back(count);
    }
    return answer;
}

์ด ๋ฌธ์ œ์—์„œ ๋ฐฐ์šด ์ 

  1. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ vs ์ˆ˜ํ•™์  ์ ‘๊ทผ
    • ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ง๊ด€์ ์ด์ง€๋งŒ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ
    • ๊ฒฐ๊ณผ๊ฐ’(์™„๋ฃŒ์ผ)์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋ฉด ํ›จ์”ฌ ํšจ์œจ์ 
  2. ํ๋Š” ๋‹จ์ˆœํ•œ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค
    • ๊ธฐ์ค€(front)์„ ์žก๊ณ 
    • ๊ทธ ๊ธฐ์ค€๊ณผ ๋น„๊ตํ•˜๋ฉฐ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๋„๊ตฌ
  3. “์™œ ์ด ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?”๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
    → ์ด ๋ฌธ์ œ๊ฐ€ ์ข‹์€ ์—ฐ์Šต ๋ฌธ์ œ์ธ ์ด์œ 

๐Ÿ“‚ ๊ฐœ์ธ ๋ฌธ์ œํ’€์ด ๋ ˆํฌ

https://github.com/zzmnxn/algorithm-study

'Algorithms > Problem Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] ๋ฌธ์ž์—ด ์ง‘ํ•ฉ 14425 (Silver4) - C++ Hash ํ•จ์ˆ˜  (1) 2026.01.21
[๋ฐฑ์ค€] ๋‘ ์ˆ˜์˜ ํ•ฉ 3273 (Silver3) โ€” ํ•ด์‹œ ๊ฐœ๋…์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ์ค„์ด๊ธฐ  (0) 2026.01.21
[๋ฐฑ์ค€] ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 1158 (Silver4) - C++  (0) 2026.01.18
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ 76502 (Level 2) - C++  (0) 2026.01.18
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์‹คํŒจ์œจ 42889 (Level 1) - C++  (1) 2026.01.18
'Algorithms/Problem Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] ๋ฌธ์ž์—ด ์ง‘ํ•ฉ 14425 (Silver4) - C++ Hash ํ•จ์ˆ˜
  • [๋ฐฑ์ค€] ๋‘ ์ˆ˜์˜ ํ•ฉ 3273 (Silver3) — ํ•ด์‹œ ๊ฐœ๋…์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ์ค„์ด๊ธฐ
  • [๋ฐฑ์ค€] ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 1158 (Silver4) - C++
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ 76502 (Level 2) - C++
wlals916
wlals916
  • wlals916
    JM.devlog
    wlals916
    GitHub
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (28)
      • Algorithms (20)
        • Problem Solving (14)
        • Language & Concept (6)
      • Backend (7)
        • Study Notes (1)
        • Trouble Shooting (6)
        • Development (0)
      • AI (0)
      • Review (1)
      • Dev Log (0)
  • ๊ด€๋ฆฌ์ž

    • ๊ธ€์“ฐ๊ธฐ
    • ๊ด€๋ฆฌ ํŽ˜์ด์ง€
    • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํšŒ๊ณ 
    ๋ฐฑ์ค€
    ๊น€์˜ํ•œ
    ์ฝ”ํ…Œ
    C++
    ๋ฐฑ์—”๋“œ
    SpringBoot
    DevOps
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
wlals916
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ 42586 (Level 2) - C++
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”