[BOJ] 13335๋ฒ | ํธ๋ญ (C++)
2023. 9. 4. 21:20ใCoding Test/BOJ
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป๐ปํ์ด ๊ณผ์
- ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ธฐ ์ํด ๋๊ธฐ ์ค์ธ ํธ๋ญ๋ค, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ์ค์ธ ํธ๋ญ๋ค์ ๊ด๋ฆฌํ 2๊ฐ์ ํ(Queue)๋ฅผ ์ ์ธํฉ๋๋ค.
- ํด๋น 2๊ฐ์ ํ๊ฐ ๋ชจ๋ ๋น์๋ค๋ฉด, ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํฉ๋๋ค.
- ์๋๋ผ๋ฉด, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ๋ค ์ค ๋งจ ์ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋์ง ํ์ธํฉ๋๋ค.
- "๊ฒฝ๊ณผ์๊ฐ - ํด๋น ํธ๋ญ์ด ๋ค๋ฆฌ์ ์ง์
ํ ์๊ฐ = ๋ค๋ฆฌ์ ๊ธธ์ด"๋ผ๋ฉด, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ต๋๋ค.
- ์ด ๊ฒฝ์ฐ, ์ด ๋ฌด๊ฒ์์ ํด๋น ํธ๋ญ ๋ฌด๊ฒ๋ฅผ ๋นผ์ฃผ๊ณ , ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ๋ค ํ์์ pop ํด์ค๋๋ค.
- "๊ฒฝ๊ณผ์๊ฐ - ํด๋น ํธ๋ญ์ด ๋ค๋ฆฌ์ ์ง์
ํ ์๊ฐ = ๋ค๋ฆฌ์ ๊ธธ์ด"๋ผ๋ฉด, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ต๋๋ค.
- "์ด ๋ฌด๊ฒ + ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ๋ค์ ํธ๋ญ์ ๋ฌด๊ฒ"๊ฐ ๋ค๋ฆฌ์ ์ต๋ ํ์ค ์ดํ์ธ์ง ํ์ธํฉ๋๋ค.
- ์ต๋ ํ์ค ์ดํ๋ผ๋ฉด, ํด๋น ํธ๋ญ์ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ๋ค ํ์ ๋ฃ์ด์ฃผ๊ณ , ๋๊ธฐ ํธ๋ญ ํ์์ pop ํฉ๋๋ค.
- ์ด ๋ฌด๊ฒ์ ํด๋น ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ํด์ค๋๋ค.
- ๊ฒฝ๊ณผ์๊ฐ์ +1 ํฉ๋๋ค.
- 2๋ฒ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง, 3~5๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <queue>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
struct Truck
{
Truck() { }
Truck(int weight, int enterTime) : _weight(weight), _enterTime(enterTime){ }
int _weight;
int _enterTime;
};
void CheckTheTruckOnBridge(queue<Truck>& trucks, const int totalTime, const int bridgeLength, int& currentWeight)
{
// ๋ค๋ฆฌ ์์ ํธ๋ญ๋ค ์ค ๋งจ ์ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๋ค ์ง๋ฌ๋์ง ์ฒดํฌ
while (!trucks.empty())
{
Truck frontTruck = trucks.front();
// ๋ค๋ฆฌ๋ฅผ ๋ค ๊ฑด๋ ๊ฒฝ์ฐ, ์ด ๋ฌด๊ฒ์์ ํด๋น ํธ๋ญ ๋ฌด๊ฒ ๋นผ๊ธฐ
if (totalTime - frontTruck._enterTime == bridgeLength)
{
currentWeight -= frontTruck._weight;
trucks.pop();
}
break;
}
}
int main()
{
FAST_IO
int truckNums, bridgeLength, bridgeMaxWeight;
cin >> truckNums >> bridgeLength >> bridgeMaxWeight;
queue<int> trucks;
for (int i = 0; i < truckNums; i++)
{
int weight;
cin >> weight;
trucks.emplace(weight);
}
queue<Truck> trucksOnBridge;
int currentWeight = 0, totalTime = 0;
while (true)
{
if (trucks.empty() and trucksOnBridge.empty())
break;
CheckTheTruckOnBridge(trucksOnBridge, totalTime, bridgeLength, currentWeight);
// ๋ค๋ฆฌ ์์ ํธ๋ญ์ ์ฌ๋ฆด ์ ์์ ๊ฒฝ์ฐ ์ฌ๋ฆฌ๊ธฐ
if (!trucks.empty() and currentWeight + trucks.front() <= bridgeMaxWeight)
{
int currentTruckWeight = trucks.front();
trucksOnBridge.push(Truck(currentTruckWeight, totalTime));
currentWeight += currentTruckWeight;
trucks.pop();
}
totalTime++;
}
cout << totalTime;
return 0;
}
728x90
๋ฐ์ํ
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2512๋ฒ | ์์ฐ (C++) (0) | 2023.09.06 |
---|---|
[BOJ] 1300๋ฒ | K๋ฒ์งธ ์ (C++) (0) | 2023.09.06 |
[BOJ] 1654๋ฒ | ๋์ ์๋ฅด๊ธฐ (C++) (0) | 2023.09.02 |
[BOJ] 1629๋ฒ | ๊ณฑ์ (C++) (0) | 2023.09.01 |
[BOJ] 1780๋ฒ | ์ข ์ด์ ๊ฐ์ (C++) (0) | 2023.08.31 |