๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][Programmers][์Šคํƒ/ํ] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

ibelieveinme 2023. 6. 4. 20:27
728x90

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


*๋ฌธ์ œ ์„ค๋ช…

๋‹ค๋ฆฌ์˜ ๊ธธ์ด, ๋‹ค๋ฆฌ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ€ ๊ฐ’, ๋ฌด๊ฒŒ๋ฅผ ๋‹ด์€ ํŠธ๋Ÿญ vector๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚  ๋•Œ ๋ช‡์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

ํ•œ๋ฒˆ์— ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ ๊ฐœ์ˆ˜๋Š” ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ๋„˜์„ ์ˆ˜ ์—†๊ณ  ๋‹ค๋ฆฌ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ€๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์—†๋‹ค.

ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๊ธธ์ด 1์„ ์ง€๋‚  ๋•Œ, 1์ดˆ๊ฐ€ ์†Œ์š”๋œ๋‹ค. ๋‹ค๋ฆฌ๊ธธ์ด๊ฐ€ 2๋ผ๋ฉด 1์ดˆ๋‹น 1์”ฉ ์ง€๋‚˜์„œ ๋‹ค ๊ฑด๋„ˆ๋Š”๋ฐ ์ด 3์ดˆ์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

 

*๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ•

๊ฑด๋„ˆ์•ผ ํ•˜๋Š” ํŠธ๋Ÿญ์˜ ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ๋งŒํผ queue๋ฅผ ์ƒ์„ฑํ•˜๊ณ  0์œผ๋กœ ์ฑ„์›Œ๋‘”๋‹ค.

queue์— ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๊ณ  ์žˆ๋Š” ํŠธ๋Ÿญ์„ ๋‹ด๋Š”๋‹ค.

๋‹ค์Œ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋™์‹œ์— ๊ฑด๋„  ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ์ธ์ง€ ์ฒดํฌํ•œ๋‹ค.

๋ฌด๊ฒŒ์˜ ํ•ฉ์ด ๋™์‹œ์— ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค๋ฉด 0์„ queue์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋™์‹œ์— ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ ํŠธ๋Ÿญ์„ queue์— ๋„ฃ๋Š”๋‹ค.

 

*์•Œ์•„๋‘˜ ๊ฒƒ

๊ฑ ๋ฌธ์ œ๊ฐ€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ ํ•œ๋ฒˆ ๋” ํ’€์–ด๋ณด๊ธฐ๋ฅผ...

 

*์ฝ”๋“œ

#include <string>
#include <vector>
#include <queue>
using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0; //ํŠธ๋Ÿญ์ด ์ง€๋‚˜๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„
    int next_truck = 0; //๋‹ค์Œ์— ์ด๋™ํ•  ํŠธ๋Ÿญ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ๋ฑ์Šค
    int weight_sum = 0; //๋‹ค๋ฆฌ ์œ„์— ์˜ฌ๋ฆด ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ ํ•ฉ
    queue<int> on_bridge; //๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ๋ฆฌ์ŠคํŠธ
    
    //๋งจ ์ดˆ๊ธฐ ๋‹ค๋ฆฌ๋ฅผ ๋‹ค๋ฆฌ๊ธธ์ด ๋งŒํผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    for(int i = 0; i < bridge_length; i++){
        on_bridge.push(0);
    }    
    
    //๋‹ค๋ฆฌ ์œ„๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๋™์•ˆ ๋ฐ˜๋ณต๋ฌธ ์ง„ํ–‰
    while(!on_bridge.empty()){
        //์ดˆ ๋Š˜๋ฆฌ๊ธฐ
        answer++;
        //๋‹ค๋ฆฌ ์œ„ ์ž๋™์ฐจ ๋ฌด๊ฒŒ๋“ค์˜ ํ•ฉ
        weight_sum -= on_bridge.front();
        //ํŠธ๋Ÿญ ๊ฑด๋„ˆ๊ธฐ OK
        on_bridge.pop();
        
        if(next_truck < truck_weights.size()){
            //๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด
            if(weight_sum + truck_weights[next_truck] <= weight){
                //๋ฌด๊ฒŒ ํ•ฉ์— ๋‹ค์Œ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ๋ฅผ ๋”ํ•จ
                weight_sum += truck_weights[next_truck];
                //๋‹ค๋ฆฌ ์œ„์— ํŠธ๋Ÿญ์„ ์˜ฌ๋ฆผ
                on_bridge.push(truck_weights[next_truck]);
                //ํŠธ๋Ÿญ ์ธ๋ฑ์Šค ํ•˜๋‚˜ ๋Š˜๋ ค์ฃผ๊ธฐ
                next_truck++;
            }
            //๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ๋ฅผ ๋„˜์—ˆ๋‹ค๋ฉด ํŠธ๋Ÿญ ๋Œ€์‹  0์„ ๋„ฃ์Œ
            else on_bridge.push(0);
        }
    }
    return answer;
}
728x90