ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / λ””μŠ€ν¬ 컨트둀러(C++)

2023. 4. 4. 21:17Β·πŸ–₯️ Study Note/Coding Test

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

문제 μ„€λͺ…

ν•˜λ“œλ””μŠ€ν¬λŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ””μŠ€ν¬ 컨트둀러λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법은 μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 일반적인 방법은 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄

  • `0ms μ‹œμ μ— 3msκ°€ μ†Œμš”λ˜λŠ” Aμž‘μ—… μš”μ²­
  • 1ms μ‹œμ μ— 9msκ°€ μ†Œμš”λ˜λŠ” Bμž‘μ—… μš”μ²­
  • 2ms μ‹œμ μ— 6msκ°€ μ†Œμš”λ˜λŠ” Cμž‘μ—… μš”μ²­`

와 같은 μš”μ²­μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€. 이λ₯Ό 그림으둜 ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μš”μ²­λ§Œμ„ μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έμ— 각각의 μž‘μ—…μ„ μš”μ²­λ°›μ€ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό 같이 처리 λ©λ‹ˆλ‹€.

  • `A: 3ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ (μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 3ms)
  • B: 1msλΆ€ν„° λŒ€κΈ°ν•˜λ‹€κ°€, 3ms μ‹œμ μ— μž‘μ—…μ„ μ‹œμž‘ν•΄μ„œ 12ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ(μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 11ms)
  • C: 2msλΆ€ν„° λŒ€κΈ°ν•˜λ‹€κ°€, 12ms μ‹œμ μ— μž‘μ—…μ„ μ‹œμž‘ν•΄μ„œ 18ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ(μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 16ms)`

이 λ•Œ 각 μž‘μ—…μ˜ μš”μ²­λΆ€ν„° μ’…λ£ŒκΉŒμ§€ κ±Έλ¦° μ‹œκ°„μ˜ 평균은 10ms(= (3 + 11 + 16) / 3)κ°€ λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ A → C → B μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λ©΄

  • `A: 3ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ(μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 3ms)
  • C: 2msλΆ€ν„° λŒ€κΈ°ν•˜λ‹€κ°€, 3ms μ‹œμ μ— μž‘μ—…μ„ μ‹œμž‘ν•΄μ„œ 9ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ(μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 7ms)
  • B: 1msλΆ€ν„° λŒ€κΈ°ν•˜λ‹€κ°€, 9ms μ‹œμ μ— μž‘μ—…μ„ μ‹œμž‘ν•΄μ„œ 18ms μ‹œμ μ— μž‘μ—… μ™„λ£Œ(μš”μ²­μ—μ„œ μ’…λ£ŒκΉŒμ§€ : 17ms)`

μ΄λ ‡κ²Œ A → C → B의 μˆœμ„œλ‘œ μ²˜λ¦¬ν•˜λ©΄ 각 μž‘μ—…μ˜ μš”μ²­λΆ€ν„° μ’…λ£ŒκΉŒμ§€ κ±Έλ¦° μ‹œκ°„μ˜ 평균은 9ms(= (3 + 7 + 17) / 3)κ°€ λ©λ‹ˆλ‹€.

각 μž‘μ—…μ— λŒ€ν•΄ [μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œμ , μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„]을 담은 2차원 λ°°μ—΄ jobsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μž‘μ—…μ˜ μš”μ²­λΆ€ν„° μ’…λ£ŒκΉŒμ§€ κ±Έλ¦° μ‹œκ°„μ˜ 평균을 κ°€μž₯ μ€„μ΄λŠ” λ°©λ²•μœΌλ‘œ μ²˜λ¦¬ν•˜λ©΄ 평균이 μ–Όλ§ˆκ°€ λ˜λŠ”μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”. (단, μ†Œμˆ˜μ  μ΄ν•˜μ˜ μˆ˜λŠ” λ²„λ¦½λ‹ˆλ‹€)

μ œν•œ 사항

  • jobs의 κΈΈμ΄λŠ” 1 이상 500 μ΄ν•˜μž…λ‹ˆλ‹€.
  • jobs의 각 행은 ν•˜λ‚˜μ˜ μž‘μ—…μ— λŒ€ν•œ [μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œμ , μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„] μž…λ‹ˆλ‹€.
  • 각 μž‘μ—…μ— λŒ€ν•΄ μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œκ°„μ€ 0 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 각 μž‘μ—…μ— λŒ€ν•΄ μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„μ€ 1 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • ν•˜λ“œλ””μŠ€ν¬κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆμ§€ μ•Šμ„ λ•Œμ—λŠ” λ¨Όμ € μš”μ²­μ΄ λ“€μ–΄μ˜¨ μž‘μ—…λΆ€ν„° μ²˜λ¦¬ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

jobs return

[[0, 3], [1, 9], [2, 6]] 9

μž…μΆœλ ₯ 예 μ„€λͺ…

λ¬Έμ œμ— μ£Όμ–΄μ§„ μ˜ˆμ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • 0ms μ‹œμ μ— 3ms κ±Έλ¦¬λŠ” μž‘μ—… μš”μ²­μ΄ λ“€μ–΄μ˜΅λ‹ˆλ‹€.
  • 1ms μ‹œμ μ— 9ms κ±Έλ¦¬λŠ” μž‘μ—… μš”μ²­μ΄ λ“€μ–΄μ˜΅λ‹ˆλ‹€.
  • 2ms μ‹œμ μ— 6ms κ±Έλ¦¬λŠ” μž‘μ—… μš”μ²­μ΄ λ“€μ–΄μ˜΅λ‹ˆλ‹€.

λ‚΄ ν•΄λ‹΅

#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>

using namespace std;

struct cmp {
    bool operator()(vector<int> a, vector<int> b) {
        return a.at(1) > b.at(1);
    }
};

int solution(vector<vector<int>> jobs) {
    int answer = 0;
    int timer = 0;
    int nxt_job_idx = 0;
    vector<int> cur_job{0, 0};
    priority_queue<vector<int>, vector<vector<int>>, cmp> pd_job{};
    
    sort(jobs.begin(), jobs.end());
    
    while(jobs.size() > nxt_job_idx || !pd_job.empty())
    {
        // ν˜„μž¬ λ“€μ–΄μ˜¨ μž‘μ—…μ΄ μžˆλ‹€λ©΄ pd_job에 λ„£μ–΄μ€€λ‹€.
        if(jobs.size() > nxt_job_idx)
        {
            if(timer >= jobs[nxt_job_idx][0])
            {
                pd_job.push(jobs[nxt_job_idx]);
                ++nxt_job_idx;
                
                continue; // 같은 μ‹œκ°„λŒ€μ— λ“€μ–΄μ˜¨ μž‘μ—…μ΄ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ
            }
        }
            
        // μž‘μ—… 큐에 μž‘μ—…μ΄ 있으면 μž‘μ—… μ§„ν–‰
        if(!pd_job.empty())
        {
             // μž‘μ—… μ§„ν–‰
            timer += pd_job.top()[1];
            
            // μž‘μ—… μ™„λ£Œ
            answer += (timer - pd_job.top()[0]);
            pd_job.pop();
        }
        // μž‘μ—… 큐에 μž‘μ—…μ΄ μ—†μœΌλ©΄ λ‹€μŒ μž‘μ—… μ‹œμž‘ μ‹œκ°„μœΌλ‘œ 이동
        else
            timer = jobs[nxt_job_idx][0];
    }
    
    // μ‹œκ°„ 평균 λ‚΄κΈ°
    answer /= jobs.size();
    
    return answer;
}
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ–₯️ Study Note > Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / μ „λ ₯망을 λ‘˜λ‘œ λ‚˜λˆ„κΈ°(C++)  (0) 2023.04.06
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / λͺ¨μŒμ‚¬μ „(C++)  (0) 2023.04.05
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / 더 맡게(C++)  (0) 2023.04.02
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / ν”Όλ‘œλ„(C++)  (0) 2023.04.01
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / 카펫(C++)  (0) 2023.03.30
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / μ „λ ₯망을 λ‘˜λ‘œ λ‚˜λˆ„κΈ°(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / λͺ¨μŒμ‚¬μ „(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / 더 맡게(C++)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / ν”Όλ‘œλ„(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
Beankong_
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / level.2 / λ””μŠ€ν¬ 컨트둀러(C++)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”