λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“šAlgorithm ------------/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μŠ€νƒ/큐/κΈ°λŠ₯개발/C++

문제 μ„€λͺ…

 

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

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

μ΄λ•Œ 뒀에 μžˆλŠ” κΈ°λŠ₯은 μ•žμ— μžˆλŠ” κΈ°λŠ₯이 배포될 λ•Œ ν•¨κ»˜ λ°°ν¬λ©λ‹ˆλ‹€.

λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μž‘μ—…μ˜ 진도가 적힌 μ •μˆ˜ λ°°μ—΄ progresses와

각 μž‘μ—…μ˜ 개발 속도가 적힌 μ •μˆ˜ λ°°μ—΄ speedsκ°€ μ£Όμ–΄μ§ˆ λ•Œ 각

λ°°ν¬λ§ˆλ‹€ λͺ‡ 개의 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

 

μ œν•œ 사항

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

 

μž…μΆœλ ₯ 예

 

progresses 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]

 

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

 

μž…μΆœλ ₯ 예 #1
첫 번째 κΈ°λŠ₯은 93% μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 1%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 7일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.
두 번째 κΈ°λŠ₯은 30%κ°€ μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 30%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 3일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이전 첫 번째 κΈ°λŠ₯이 아직 μ™„μ„±λœ μƒνƒœκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 첫 번째 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ” 7일째 λ°°ν¬λ©λ‹ˆλ‹€.
μ„Έ 번째 κΈ°λŠ₯은 55%κ°€ μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 5%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 9일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 7일째에 2개의 κΈ°λŠ₯, 9일째에 1개의 κΈ°λŠ₯이 λ°°ν¬λ©λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #2
λͺ¨λ“  κΈ°λŠ₯이 ν•˜λ£¨μ— 1%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ, μž‘μ—…μ΄ λλ‚˜κΈ°κΉŒμ§€ 남은 μΌμˆ˜λŠ” 각각 5일, 10일, 1일, 1일, 20일, 1μΌμž…λ‹ˆλ‹€. μ–΄λ–€ κΈ°λŠ₯이 λ¨Όμ € μ™„μ„±λ˜μ—ˆλ”λΌλ„ μ•žμ— μžˆλŠ” λͺ¨λ“  κΈ°λŠ₯이 μ™„μ„±λ˜μ§€ μ•ŠμœΌλ©΄ 배포가 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 5일째에 1개의 κΈ°λŠ₯, 10일째에 3개의 κΈ°λŠ₯, 20일째에 2개의 κΈ°λŠ₯이 λ°°ν¬λ©λ‹ˆλ‹€.

 


#include <string>
#include <vector>
#include <queue>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> complete;
    
    for(int i=0; i < progresses.size(); i++ )
    {
        auto ret = (100-progresses[i])/speeds[i];
        if(  (100-progresses[i])%speeds[i] )
        	complete.push(ret + 1);
        else
            complete.push(ret);
    }
    
    while( !complete.empty() )
    {
        auto elem = complete.front();
        complete.pop();
        int cnt = 1;
        while( elem >= complete.front() && !complete.empty() )
        {
            cnt++;
            complete.pop();
        }
        answer.push_back(cnt);
    }
   
    return answer;
}

 

큐λ₯Ό μ‚¬μš©ν•΄μ„œ 문제λ₯Ό ν’€μ—ˆλ‹€

큐에 배포 κ°€λŠ₯ν•œ λ‚ μ§œλ₯Ό λ„£μ–΄μ£Όμ—ˆκ³ ,

이전 값을 κΈ°μ–΅ν•΄μ„œ λ¨Όμ € pop()된 μš”μ†Œκ°€ 더 크닀면 answer에 λ“€μ–΄κ°ˆ 값을

증가 μ‹œμΌœμ£Όλ„λ‘ ν–ˆλ‹€

 


이런 문제 λ‚΄λŠ” 뢄듀은 μ°Έ 머리가 쒋은 것 κ°™λ‹€

μ˜ˆμ‹œ λ§Œλ“œλŠ” 것도 일이닀...

큐λ₯Ό 이런 μ‹μœΌλ‘œ μ‘μš©ν•˜λ„λ‘ λ§Œλ“€ μˆ˜λ„ μžˆκ΅¬λ‚˜ μ‹Άμ—ˆλ‹€

 

레벨 2라고 μ ν˜€μžˆμ—ˆλŠ”λ°, λ‚˜λ¨Έμ§€ κ³„μ‚°ν•΄μ„œ λ‚ μ§œ λ”ν•΄μ€€κ±°λž‘

큐 μ΄μš©ν•΄μ„œ ν•˜κΈ°λ§Œ ν•˜λ©΄ κ·Έλž˜λ„ 어렡지 μ•Šμ€ λ¬Έμ œμ˜€λ˜ 것 κ°™λ‹€