Algorithm/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / C++] κΈ°λŠ₯개발 풀이

meeeeejin 2020. 8. 13. 16:11

문제

 

<문제 μ„€λͺ…>

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ νŒ€μ—μ„œλŠ” κΈ°λŠ₯ κ°œμ„  μž‘μ—…μ„ μˆ˜ν–‰ μ€‘μž…λ‹ˆλ‹€. 각 κΈ°λŠ₯은 진도가 100% 일 λ•Œ μ„œλΉ„μŠ€μ— λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

또, 각 κΈ°λŠ₯의 κ°œλ°œμ†λ„λŠ” λͺ¨λ‘ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 뒀에 μžˆλŠ” κΈ°λŠ₯이 μ•žμ— μžˆλŠ” κΈ°λŠ₯보닀 λ¨Όμ € 개발될 수 있고, μ΄λ•Œ 뒀에 μžˆλŠ” κΈ°λŠ₯은 μ•žμ— μžˆλŠ” κΈ°λŠ₯이 배포될 λ•Œ ν•¨κ»˜ λ°°ν¬λ©λ‹ˆλ‹€.

 

λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μž‘μ—…μ˜ 진도가 적힌 μ •μˆ˜ λ°°μ—΄ progresses와 각 μž‘μ—…μ˜ 개발 속도가 적힌 μ •μˆ˜ λ°°μ—΄ speedsκ°€ μ£Όμ–΄μ§ˆ λ•Œ 각 λ°°ν¬λ§ˆλ‹€ λͺ‡ 개의 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

 

<μ œν•œ 사항>

  • μž‘μ—…μ˜ 개수(progresses, speedsλ°°μ—΄μ˜ 길이)λŠ” 100개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ§„λ„λŠ” 100 미만의 μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ†λ„λŠ” 100 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • λ°°ν¬λŠ” ν•˜λ£¨μ— ν•œ 번만 ν•  수 있으며, ν•˜λ£¨μ˜ 끝에 이루어진닀고 κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ§„λ„μœ¨μ΄ 95%인 μž‘μ—…μ˜ 개발 속도가 ν•˜λ£¨μ— 4%라면 λ°°ν¬λŠ” 2일 뒀에 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

 

 

<μž…μΆœλ ₯ 예>


progresses speeds return
[93,30,55] [1,30,5] [2,1]

 

 

https://programmers.co.kr/learn/courses/30/lessons/42586

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - κΈ°λŠ₯개발

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ νŒ€μ—μ„œλŠ” κΈ°λŠ₯ κ°œμ„  μž‘μ—…μ„ μˆ˜ν–‰ μ€‘μž…λ‹ˆλ‹€. 각 κΈ°λŠ₯은 진도가 100%일 λ•Œ μ„œλΉ„μŠ€μ— λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 또, 각 κΈ°λŠ₯의 κ°œλ°œμ†λ„λŠ” λͺ¨λ‘ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 뒀에 μžˆλŠ” κΈ°λŠ₯이 μ•žμ— μžˆλŠ” οΏ½οΏ½

programmers.co.kr

 

 

 

문제 풀이

 

각 κΈ°λŠ₯ κ°œλ°œμ— κ±Έλ¦¬λŠ” μ‹œκ°„μ„ κ³„μ‚°ν•˜μ—¬ 큐에 λ‹΄λŠ”λ‹€. 예λ₯Ό λ“€μ–΄ progresses = [93, 30, 55], speeds = [1, 30, 5]κ°€ μž…λ ₯으둜 주어진닀면, 각 κΈ°λŠ₯ 개발이 λλ‚˜λŠ” 날은 각각 [7, 3, 9]κ°€ 될 것이닀. 

 

큐의 μ›μ†Œκ°€ 남아 μžˆλŠ” λ™μ•ˆ 배포λ₯Ό μ‹€μ‹œν•œλ‹€. μ΄λ•Œ 맨 μ•ž μ›μ†Œ(κ°€μž₯ λ¨Όμ € λ°°ν¬λ˜λŠ” κΈ°λŠ₯의 개발 μ™„λ£Œ λ‚ μ§œ)보닀 값이 μž‘μ€ μ›μ†Œλ“€μ€ 이미 κΈ°λŠ₯개발이 λλ‚¬μœΌλ―€λ‘œ 같이 λ°°ν¬ν•œλ‹€. 이 κ³Όμ •μ—μ„œ λͺ‡ 개의 κΈ°λŠ₯이 같이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό μ €μž₯ν•˜μ—¬ ν•œ 번의 λ°°ν¬λ§ˆλ‹€ answer에 λ„£λŠ”λ‹€.

 

 

 

 

 

 

μ†ŒμŠ€μ½”λ“œ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <string>
#include <vector>
#include <queue>
 
using namespace std;
 
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q; // μž‘업이 μ™„λ£Œλ˜λŠ” λ‚ μ„ λ‹΄λŠ” ν
 
    // κ° κΈ°λŠ₯의 κ°œλ°œ μž‘업이 μ™„λ£Œλ˜λŠ” λ‚  κ³„μ‚°
    for (int i = 0; i < progresses.size(); i++) {
        int day = 0;
        while (progresses[i] < 100) {
            day++;
            progresses[i] += speeds[i];
        }
        q.push(day);
    }
 
    // κ° λ‚ μ§œμ— λͺ‡ κ°œμ˜ κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”지 κ³„μ‚°
    while (!q.empty()) {
        // d: λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μž‘μ—…μ˜ μ™„λ£Œ λ‚ μ§œ, p: κ° λ‚ μ§œμ˜ λ°°ν¬λ˜λŠ” κΈ°λŠ₯의 μˆ˜
        int d = q.front(), p = 1;
        q.pop();
 
        // λ‹€μŒ μž‘업을 κ°™μ΄ λ°°ν¬ν•  μˆ˜ μžˆλŠ” κ²½μš°
        while ((!q.empty()) && (q.front() <= d)) {
            q.pop();
            p++;
        }
        answer.push_back(p);
    }
 
    return answer;
}
cs

 

μ •ν™•μ„± ν…ŒμŠ€νŠΈ

 

 

 

κ³΅λΆ€ν•œ 것을 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μˆ˜μ •ν•  뢀뢄이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

 

 

728x90