๋ฌธ์ ์ค๋ช
ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ค๋ฆฌ์๋ ํธ๋ญ์ด ์ต๋ 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 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- weight๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- truck_weights์ ๊ธธ์ด๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- ๋ชจ๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ 1 ์ด์ weight ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
bridge_length | weight | truck_weights | return |
2 | 10 | [7,4,5,6] | 8 |
100 | 100 | [10] | 101 |
100 | 100 | [10,10,10,10,10,10,10,10,10,10] | 110 |
๋ด ํด๋ต
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0; // ๋ชจ๋ ํธ๋ญ
int total_weight = 0; // ๋ค๋ฆฌ ์์ ํธ๋ญ ์ ์ฒด ๋ฌด๊ฒ
int next = 0; // ๋ค์์ ์ง์
ํ ํธ๋ญ
queue<int> trucks_on_bridge; // ๋ค๋ฆฌ ์์ ์๋ ํธ๋ญ
// ๋ค๋ฆฌ ๊ธธ์ด์ ๋ง๊ฒ queue ํฌ๊ธฐ ์
ํ
for(int i = 0; i < bridge_length; ++i)
trucks_on_bridge.push(-1);
// ํธ๋ญ ์ด๋
while(next < truck_weights.size()) // ๋ง์ง๋ง ํธ๋ญ ์ง์
์์ ์ข
๋ฃ
{
// ํธ๋ญ out
++answer;
if(-1 != trucks_on_bridge.front())
{
total_weight -= truck_weights[trucks_on_bridge.front()];
}
trucks_on_bridge.pop();
// ํธ๋ญ in
// ๋ค์ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ์ถ๊ฐํ์ ๋, ์ ํ ์ค๋ ์ดํ๋ผ๋ฉด
if((total_weight + truck_weights[next]) <= weight)
{
total_weight += truck_weights[next];
trucks_on_bridge.push(next);
++next;
}
// ๋ค์ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ์ถ๊ฐํ์ ๋, ์ ํ ์ค๋ ์ด๊ณผ๋ผ๋ฉด
else
{
trucks_on_bridge.push(-1);
}
}
// ๋ง์ง๋ง ํธ๋ญ ํต๊ณผ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ ์ถ๊ฐ
answer += bridge_length;
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค C++ ๋ ํผ๋ฐ์ค ์ฌ์ดํธ (0) | 2023.03.21 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ์ฃผ์๊ฐ๊ฒฉ(C++) (0) | 2023.03.21 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ํ๋ฆฐํฐ(C++) (0) | 2023.03.16 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ๊ธฐ๋ฅ๊ฐ๋ฐ(C++) (0) | 2023.03.16 |
programmers / level.1 / ๊ฐ์ ์ซ์๋ ์ซ์ด(C++) (0) | 2023.03.14 |