๋ฌธ์ ๋งํฌ
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 |
์ด๊ฒ๋ ์ฌ์ค ํ๋ฅผ ๊ตณ์ด ์ด์ฉํ์ง ์์๋ ๋๋ ๋ฌธ์ ์ง๋ง ๋ฌธ์ ๋ถ๋ฅ๊ฐ ์คํ/ํ ๋ฌธ์ ๋ผ์ ํ๋ฅผ ์ด์ฉํ๋ค.
'ํ๋ก๊ทธ๋๋จธ์ค > 2๋จ๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv2] : ์กฐ์ด์คํฑ (0) | 2022.06.22 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv2] : ํ๊ฒ ๋๋ฒ (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv2] : ํ๋ฆฐํฐ (0) | 2022.06.15 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv2] : ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2022.06.15 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv2] : ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2022.06.14 |