https://school.programmers.co.kr/learn/courses/30/lessons/42583
๋ฌธ์ ์ค๋ช
ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ค๋ฆฌ์๋ ํธ๋ญ์ด ์ต๋ bridge_length๋ ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฆฌ๋ weight ์ดํ๊น์ง์ ๋ฌด๊ฒ๋ฅผ ๊ฒฌ๋ ์ ์์ต๋๋ค. ๋จ, ๋ค๋ฆฌ์ ์์ ํ ์ค๋ฅด์ง ์์ ํธ๋ญ์ ๋ฌด๊ฒ๋ ๋ฌด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํธ๋ญ 2๋๊ฐ ์ฌ๋ผ๊ฐ ์ ์๊ณ ๋ฌด๊ฒ๋ฅผ 10kg๊น์ง ๊ฒฌ๋๋ ๋ค๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ฌด๊ฒ๊ฐ [7, 4, 5, 6]kg์ธ ํธ๋ญ์ด ์์๋๋ก ์ต๋จ ์๊ฐ ์์ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฑด๋์ผ ํฉ๋๋ค.
๊ฒฝ๊ณผ ์๊ฐ๋ค๋ฆฌ๋ฅผ ์ง๋ ํธ๋ญ / ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ / ๋๊ธฐ ํธ๋ญ
0 | [] | [] | [7,4,5,6] |
1~2 | [] | [7] | [4,5,6] |
3 | [7] | [4] | [5,6] |
4 | [7] | [4,5] | [6] |
5 | [7,4] | [5] | [6] |
6~7 | [7,4,5] | [6] | [] |
8 | [7,4,5,6] | [] | [] |
๋ฐ๋ผ์, ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ค๋ฉด ์ต์ 8์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ ์๋ ํธ๋ญ ์ bridge_length, ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ weight, ํธ๋ญ ๋ณ ๋ฌด๊ฒ truck_weights๊ฐ ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ์ ์ ์ถ์ด๋ฏ๋ก ํ๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๋ ์ฌ๋ฆฌ๋ ๊ฑด ์ฌ์ ์ผ๋,
์ธ์ ๋ฃ๊ณ ์ธ์ ๋นผ์ผํ๋์ง ํท๊ฐ๋ ธ๋ ๋ฌธ์ .
์ฐธ๊ณ ๋ก ์ด ๋ฌธ์ ์์ bridge_length๋ ํธ๋ญ์ด ์ฌ๋ผ๊ฐ ์ ์๋ ์์ด์ ๋ค๋ฆฌ์ ๊ธธ์ด(ํธ๋ญ์ 1์ด์ 1๋งํผ ์ ์ง)์ด๋ค.
while ๋ฌธ ์์์ idx ์นด์ดํธ๊ฐ ๋๋๋ฉด ๋ง์ง๋ง ํธ๋ญ์ด ์ง์ ํ๋ค๋ ๋ง์ด๋ฏ๋ก answer์ ๋ค๋ฆฌ ์ฌ์ด์ฆ๋ฅผ ๋ํด์ฃผ๊ณ breakํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์ฌ์ด์ฆ๊ฐ ๋ค๋ฆฌ ์ฌ์ด์ฆ์ ๊ฐ์์ง๋ฉด ๋ฌด๊ฒ ํฉ๊ณ์ธ sum์์ q.front๋ฅผ ๋นผ์ฃผ๊ณ popํด์ค๋ค.
ํ์ฌ "๋ค๋ฆฌ ์์ ๋ฌด๊ฒ ํฉ๊ณ+๋ค์ ํธ๋ญ์ ๋ฌด๊ฒ"๊ฐ weight๋ณด๋ค ์๋ค๋ฉด ํธ๋ญ์ ์ฌ๋ฆฌ๊ณ ,
ํฌ๋ค๋ฉด 0์ ํ์ ๋ฃ์ด์ ์๊ฐ์ ํ์ํ๊ณ ํธ๋ญ์ ์์ผ๋ก ๋ฐ์ด์ค๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ํ๋ฆ์์ ์ ์ ์์
1์ด : 7 <- queue size = 1, 7+4 > weight์ด๋ฏ๋ก 0 push
2์ด : 7 0 <- queue size = 2, 7 pop, 0+4 <= weight
3์ด : 0 4 <- queue size = 2, 0 pop, 4+5 <= weight
4์ด : 4 5 <- ...
๋์ ํ์ด
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
queue<int> q;
int sum=0;
int idx=0;
while(1){
if(idx==truck_weights.size()){ // ๋ง์ง๋ง ํธ๋ญ
answer+=bridge_length;
break;
}
answer++;
int now = truck_weights[idx];
if(q.size()==bridge_length){
sum -= q.front();
q.pop();
}
if(sum + now <= weight){
sum += now;
q.push(now);
idx++;
}else{
q.push(0); // ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ 0์ด ํฌํจ๋จ
}
}
return answer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/PGS] Lv.2 : ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (์์ ํ์/bfs/dfs) (1) | 2023.05.26 |
---|---|
[C++/PGS] Lv.2 : ํผ๋ก๋ (์์ ํ์) (0) | 2023.05.26 |
[C++/PGS] Lv.3 : ๋ฒ ์คํธ์จ๋ฒ (ํด์ / map์ ๋ ฌ) (0) | 2023.04.13 |
[C++/PGS] Lv.2 : ์์/์์ฅ (ํด์) (0) | 2023.04.13 |
[C++/PGS] Lv.2 : ์ ํ๋ฒํธ ๋ชฉ๋ก (ํด์) (0) | 2023.04.13 |