๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2] : ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

by Jaeguk 2022. 6. 15.
๋ฌธ์ œ ๋งํฌ

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

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

programmers.co.kr

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

ํ’€์ด
  • ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค๋ฆฌ์œ„์˜ ํŠธ๋Ÿญ์€ 1์ดˆ์— 1์นธ์”ฉ ์›€์ง์ธ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๊ธฐ ์œ„ํ•ด์„œ๋Š” bridge_length ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๊ฑด๋„ˆ๊ธฐ๊นŒ์ง€ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆด์ง€ ๋ชจ๋ฅด๋ฏ€๋กœ ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๊ฑด๋„ˆ๊ฐˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด๋•Œ ๋ฐ˜๋ณต๋ฌธ 1ํšŒ๋‹น 1์ดˆ๊ฐ€ ํ˜๋Ÿฌ๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋จผ์ € ์ฃผ์–ด์ง„ ์ •๋ณด๋“ค ์™ธ์— ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์ž.

 

1. ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด

๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ์ง„ํ–‰ํ•œ ๊ฑฐ๋ฆฌ, ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์•ผ ํ•ด๋‹น ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๊ฐ”๋Š”์ง€, ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ์˜ ํ•ฉ์€ ์–ผ๋งˆ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ์ •๋ณด๋“ค์„ ์ €์žฅํ•  vector<pair<int,int>> on_the_bridge ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

 

2. ํ˜„์žฌ๊นŒ์ง€ ๊ฑด๋„ˆ๊ฐ„ ํŠธ๋Ÿญ์€ ๋ช‡ ๋Œ€์ธ๊ฐ€

ํ˜„์žฌ๊นŒ์ง€ ๊ฑด๋„ˆ๊ฐ„ ํŠธ๋Ÿญ์ด ๋ช‡ ๋Œ€์ธ์ง€ ์•Œ์•„์•ผ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฑด๋„ˆ๊ฐ„ ํŠธ๋Ÿญ์˜ ์ดํ•ฉ == ์ „์ฒด ํŠธ๋Ÿญ์˜ ์ˆ˜๊ฐ€ ๋  ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

3. ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ์˜ ์ดํ•ฉ

ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ ์ดํ•ฉ์„ ์•Œ์•„์•ผ ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ํ•ด๋‹น ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋งŒํผ + ํ•ด์ฃผ๊ณ , ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ฉด ํ•ด๋‹น ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ - ํ•ด์ค€๋‹ค.

 

๋Œ€๋žต ์ด ์ •๋„๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์€ ๋ฐ˜๋ณต๋ฌธ 1ํšŒ( 1์ดˆ ) ๋™์•ˆ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•  ์—…๋ฌด๋“ค์ด๋‹ค.

1. ๋ชจ๋“  ํŠธ๋Ÿญ 1์นธ์”ฉ ์ด๋™

on_the_bridge์— ์žˆ๋Š” ๋ชจ๋“  ํŠธ๋Ÿญ๋“ค์˜ ์ง„ํ–‰ ๊ฑฐ๋ฆฌ๋ฅผ + 1 ํ•ด์ค€๋‹ค.

 

2. ๊ฑด๋„ˆ๊ฐ„ ํŠธ๋Ÿญ์ด ์žˆ๋Š”์ง€ ํ™•์ธ

๋‹ค๋ฆฌ๋Š” ์ผ๋ฐฉํ†ตํ–‰์ด๋ฏ€๋กœ 1์ดˆ์— ์—ฌ๋Ÿฌ๋Œ€์˜ ํŠธ๋Ÿญ์ด ํ•œ ๋ฒˆ์— ๊ฑด๋„ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋งจ ์•ž์—์žˆ๋Š” ํŠธ๋Ÿญ์ด ๊ฑด๋„œ๋Š”์ง€๋งŒ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค.

on_the_bridge[0] ํŠธ๋Ÿญ์˜ ์ง„ํ–‰ ๊ฑฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ณด๋‹ค ๊ธธ๋ฉด ํ†ต๊ณผํ•œ ๊ฒƒ์ด๋‹ค.

ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด ๋‹ค๋ฆฌ์œ„์˜ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ ํ•ฉ์—์„œ 0๋ฒˆ์งธ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ์ค€๋‹ค.

 

3. ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ ์ž…์žฅ

์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ์ž…์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ๋“ค์–ด๊ฐ€๋„ ๋‹ค๋ฆฌ์œ„ ํŠธ๋Ÿญ๋ฌด๊ฒŒ์˜ ์ดํ•ฉ์ด ๋‹ค๋ฆฌ๊ฐ€ ๋ฒ„ํ‹ฐ๋Š” ๋ฌด๊ฒŒ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•˜๊ณ ,

ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ์˜ ์ˆ˜๊ฐ€ ๋‹ค๋ฆฌ์˜ ๊ธธ์ด(ํŠธ๋Ÿญ ์ˆ˜์šฉ๋Ÿ‰)๋ณด๋‹ค ์ž‘์•„์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์•ผ ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ๋“ค์–ด๊ฐ€๋„ ์ˆ˜์šฉ๋Ÿ‰์„ ๋„˜์–ด์„œ์ง€ ์•Š๋Š”๋‹ค.

์ด 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ ํ•œ ๋Œ€๋ฅผ ๋‹ค๋ฆฌ์— ์ง„์ž…์‹œํ‚จ๋‹ค.

์ด๋•Œ, ํ˜„์žฌ ๊ฑด๋„ˆ์ง€์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ํŠธ๋Ÿญ์ด ์—†๋‹ค๋ฉด ์ด ๊ณผ์ •์€ ์ƒ๋žตํ•œ๋‹ค.

 

  • ์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <deque>
#include <queue>
 
using namespace std;
deque<pair<int,int>> on_the_bridge;
queue<int> truck;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    int total_weight = 0;
    int finished = 0//๊ฑด๋„ˆ๊ฐ„ ์ฐจ๋Ÿ‰์˜ ์ˆ˜
    
    for(int i = 0; i<truck_weights.size(); i++)
        truck.push(truck_weights[i]);
    
    while(finished < truck_weights.size()){
        answer++;     
        for(int i = 0; i < on_the_bridge.size(); i++//๋‹ค๋ฆฌ ์œ„ ํŠธ๋Ÿญ ํ•œ ์นธ์”ฉ ์ด๋™
            on_the_bridge[i].first++;
        
        if(on_the_bridge[0].first > bridge_length){ //๊ฑด๋„ˆ๊ฐ
            total_weight -= on_the_bridge[0].second;
            finished++;
            on_the_bridge.pop_front(); //๊ฑด๋„ˆ๊ฐ„ ์ฐจ ์ฒ˜๋ฆฌ
        }
        if(truck.empty())
            continue;
        if(bridge_length > on_the_bridge.size()){
            int new_car = truck.front();
            if(total_weight + new_car <= weight){ //์ƒˆ๋กœ ํ•œ ๋Œ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉด
                on_the_bridge.push_back({1,new_car});
                truck.pop();
                total_weight += new_car;
            }  
        }
    }
    return answer;
}
cs

 

์ด๊ฒƒ๋„ ์‚ฌ์‹ค ํ๋ฅผ ๊ตณ์ด ์ด์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฌธ์ œ์ง€๋งŒ ๋ฌธ์ œ ๋ถ„๋ฅ˜๊ฐ€ ์Šคํƒ/ํ ๋ฌธ์ œ๋ผ์„œ ํ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

728x90