๐Ÿ™‡โ€โ™€๏ธ[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;
}

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: