BOJ 13335. ํธ๋ญ
๐โโ๏ธ[Silver I] ํธ๋ญ - 13335
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 2024 KB, ์๊ฐ: 0 ms
๋ถ๋ฅ
์๋ฃ ๊ตฌ์กฐ, ๊ตฌํ, ํ, ์๋ฎฌ๋ ์ด์
์ ์ถ ์ผ์
2024๋ 2์ 1์ผ 12:00:47
๋ฌธ์ ์ค๋ช
๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ํ๋์ ์ฐจ์ ์ผ๋ก ๋ ๋ค๋ฆฌ๊ฐ ํ๋ ์๋ค. ์ด ๋ค๋ฆฌ๋ฅผ n ๊ฐ์ ํธ๋ญ์ด ๊ฑด๋๊ฐ๋ ค๊ณ ํ๋ค. ํธ๋ญ์ ์์๋ ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ, ํธ๋ญ์ ๋ฌด๊ฒ๋ ์๋ก ๊ฐ์ง ์์ ์ ์๋ค. ๋ค๋ฆฌ ์์๋ ๋จ์ง w ๋์ ํธ๋ญ๋ง ๋์์ ์ฌ๋ผ๊ฐ ์ ์๋ค. ๋ค๋ฆฌ์ ๊ธธ์ด๋ w ๋จ์๊ธธ์ด(unit distance)์ด๋ฉฐ, ๊ฐ ํธ๋ญ๋ค์ ํ๋์ ๋จ์์๊ฐ(unit time)์ ํ๋์ ๋จ์๊ธธ์ด๋งํผ๋ง ์ด๋ํ ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋์์ ๋ค๋ฆฌ ์์ ์ฌ๋ผ๊ฐ ์๋ ํธ๋ญ๋ค์ ๋ฌด๊ฒ์ ํฉ์ ๋ค๋ฆฌ์ ์ต๋ํ์ค์ธ L๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค. ์ฐธ๊ณ ๋ก, ๋ค๋ฆฌ ์์ ์์ ํ ์ฌ๋ผ๊ฐ์ง ๋ชปํ ํธ๋ญ์ ๋ฌด๊ฒ๋ ๋ค๋ฆฌ ์์ ํธ๋ญ๋ค์ ๋ฌด๊ฒ์ ํฉ์ ๊ณ์ฐํ ๋ ํฌํจํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค๋ฆฌ์ ๊ธธ์ด w๋ 2, ๋ค๋ฆฌ์ ์ต๋ํ์ค L์ 10, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ ํธ๋ญ์ด ํธ๋ญ์ ๋ฌด๊ฒ๊ฐ [7, 4, 5, 6]์ธ ์์๋๋ก ๋ค๋ฆฌ๋ฅผ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฑด๋๋ค๊ณ ํ์. ์ด ๊ฒฝ์ฐ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ์ต๋จ์๊ฐ์ ์๋์ ๊ทธ๋ฆผ์์ ๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ด 8 ์ด๋ค.
Figure 1. ๋ณธ๋ฌธ์ ์์ ๋ํด ํธ๋ญ๋ค์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ๊ณผ์ .
๋ค๋ฆฌ์ ๊ธธ์ด์ ๋ค๋ฆฌ์ ์ต๋ํ์ค, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ ํธ๋ญ๋ค์ ๋ฌด๊ฒ๊ฐ ์์๋๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ์ต๋จ์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
์ ๋ ฅ ๋ฐ์ดํฐ๋ ํ์ค์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ ๋ ์ค๋ก ์ด๋ฃจ์ด์ง๋ค. ์ ๋ ฅ์ ์ฒซ ๋ฒ์งธ ์ค์๋ ์ธ ๊ฐ์ ์ ์ n (1 โค n โค 1,000) , w (1 โค w โค 100) and L (10 โค L โค 1,000)์ด ์ฃผ์ด์ง๋๋ฐ, n์ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ์ ์, w๋ ๋ค๋ฆฌ์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ L์ ๋ค๋ฆฌ์ ์ต๋ํ์ค์ ๋ํ๋ธ๋ค. ์ ๋ ฅ์ ๋ ๋ฒ์งธ ์ค์๋ n๊ฐ์ ์ ์ a1, a2, โฏ , an (1 โค ai โค 10)๊ฐ ์ฃผ์ด์ง๋๋ฐ, ai๋ i๋ฒ์งธ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ํ๋ธ๋ค.
์ถ๋ ฅ
์ถ๋ ฅ์ ํ์ค์ถ๋ ฅ์ ์ฌ์ฉํ๋ค. ๋ชจ๋ ํธ๋ญ๋ค์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ์ต๋จ์๊ฐ์ ์ถ๋ ฅํ๋ผ.
๐ํ์ด
ํธ๋ญ๋ค์ ๋ค์ด์จ ์์๋๋ก ์ด๋ํด์ผํ๋ค.
๊ทธ๋์ ํธ๋ญ๋ค์ queue๋ฅผ ์ด์ฉํ๋ค.
๋ค๋ฆฌ์ ์ํ๊ฐ ์ค์ํ๋ค.
ํ์ฌ ๋ค๋ฆฌ์ ์๋ ํธ๋ญ๋ค์ ๋ฌด๊ฒ์ ๋ค์์ ๋ค์ด์ฌ ํธ๋ญ์ ๋ฌด๊ฒ, ๋ค๋ฆฌ๋ฅผ ๋๊ฐ๋ ํธ๋ญ์ ๋ฌด๊ฒ๊ฐ ์ค์ํ๋ค.
๋ค๋ฆฌ์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ฐฐ์ด์ ๋ง๋ค์๋ค.
int n, w, L;
// n : ํธ๋ญ์ ์
// w : ๋ค๋ฆฌ์ ๊ธธ์ด
// L : ์ต๋ ํ์ค
vector<int> bridge;
// n = 1000, w = 100, L = 1000
// ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ๊ฒฝ์์จ๋ ๋ ์ ๋
// ๊ทธ๋ผ ๋งค ์๊ฐ ๋ค๋ฆฌ์ ๋ฌด๊ฒ๋ฅผ ๊ณ์ฐํด์ ์์ง์ด๊ธฐ?
์์ ์์ด ์ ์ด์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐ์ํด๋ ๋๊ฒ ๋ค๋ ํ๋จ์ด ๋ค์๋ค.
๊ทธ๋์ ๋งค ์๊ฐ๋ง๋ค ๋ค๋ฆฌ์ ๋ฌด๊ฒ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
(์ง๊ธ ์๊ฐํ๋ ์๋์ ๋ง ๋นผ๊ณ ๋ํ๋ ๋ฐฉ์๋ ๋์์ง ์์๋ฏ)
์ ๋ ฅ์ ๋ฐ์์ฃผ๊ธฐ ์ํ ์ธํ
cin >> n >> w >> L;
bridge = vector<int>(w); // ๋ค๋ฆฌ ๊ธธ์ด ์ค์
queue<int> trucks;
int temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
trucks.push(temp);
}
int res = 0;
ํธ๋ญ๋ค์ ๋ด์ ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ค๊ฐ ๋ค๋ฆฌ์ ๋จ์ ์๋ ํธ๋ญ๋ค๊น์ง ๋ชจ๋ ์ด๋์ํค๊ณ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
// ํ๊ฐ ๋น ๋ ๋์
while (trucks.empty() == false)
{
// ๋ค๋ฆฌ ์ ํธ๋ญ ๋ฌด๊ฒ ํ์ธ
int sum = 0;
for (int i = 0; i < w; ++i)
{
sum += bridge[i];
}
// ๋ค๋ฆฌ ์ ํธ๋ญ๊ณผ ๋ค์ด์ฌ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ํ๊ณ ๋ฐ๋ก ๋๊ฐ ์ ์๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋บธ๋ค.
int temp = sum + trucks.front() - bridge[w - 1];
if (temp <= L)
{
// ์ด๋ํ๊ธฐ
for (int i = w - 1; i > 0; --i)
{
bridge[i] = bridge[i - 1];
}
bridge[0] = trucks.front();
trucks.pop();
res++;
}
else
{
// ์ด๋ํ๊ธฐ
for (int i = w - 1; i > 0; --i)
{
bridge[i] = bridge[i - 1];
}
bridge[0] = 0;
res++;
}
}
// ๋ค๋ฆฌ์ ๋จ์๊ฑฐ ์์ง์ด๊ธฐ
for (int i = 0; i < w; ++i)
{
if (bridge[i] != 0)
{
temp = i;
break;
}
}
res += (w - temp);
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
cout << res;
๐์ ์ฒด ์ฝ๋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int n, w, L;
// n : ํธ๋ญ์ ์
// w : ๋ค๋ฆฌ์ ๊ธธ์ด
// L : ์ต๋ ํ์ค
vector<int> bridge;
// n = 1000, w = 100, L = 1000
// ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ๊ฒฝ์์จ๋ ๋ ์ ๋
// ๊ทธ๋ผ ๋งค ์๊ฐ ๋ค๋ฆฌ์ ๋ฌด๊ฒ๋ฅผ ๊ณ์ฐํด์ ์์ง์ด๊ธฐ?
void solve()
{
cin >> n >> w >> L;
bridge = vector<int>(w); // ๋ค๋ฆฌ ๊ธธ์ด ์ค์
queue<int> trucks;
int temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
trucks.push(temp);
}
int res = 0;
// ํ๊ฐ ๋น ๋ ๋์
while (trucks.empty() == false)
{
// ๋ค๋ฆฌ ์ ํธ๋ญ ๋ฌด๊ฒ ํ์ธ
int sum = 0;
for (int i = 0; i < w; ++i)
{
sum += bridge[i];
}
int temp = sum + trucks.front() - bridge[w - 1];
if (temp <= L)
{
// ์ด๋ํ๊ธฐ
for (int i = w - 1; i > 0; --i)
{
bridge[i] = bridge[i - 1];
}
bridge[0] = trucks.front();
trucks.pop();
res++;
}
else
{
// ์ด๋ํ๊ธฐ
for (int i = w - 1; i > 0; --i)
{
bridge[i] = bridge[i - 1];
}
bridge[0] = 0;
res++;
}
}
// ๋ค๋ฆฌ์ ๋จ์๊ฑฐ ์์ง์ด๊ธฐ
for (int i = 0; i < w; ++i)
{
if (bridge[i] != 0)
{
temp = i;
break;
}
}
res += (w - temp);
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
cout << res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}