๐Ÿ™‡โ€โ™€๏ธ[Platinum II] ๋ฒ„๋ธ” ์ •๋ ฌ - 11920

๋ฌธ์ œ ๋งํฌ

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 3308 KB, ์‹œ๊ฐ„: 36 ms

๋ถ„๋ฅ˜

์ž๋ฃŒ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์šฐ์„ ์ˆœ์œ„ ํ

์ œ์ถœ ์ผ์ž

2024๋…„ 2์›” 17์ผ 14:15:04

๋ฌธ์ œ ์„ค๋ช…

๋ฒ„๋ธ” ์ •๋ ฌ์ด๋ž€, ๋‘ ์ธ์ ‘ํ•œ ์›์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธธ์ด๊ฐ€ N์ธ ์ˆ˜์—ด์„ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฒ„๋ธ” ์ •๋ ฌ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ์ด N๋ฒˆ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๊ฐ’๊ณผ ๋‘ ๋ฒˆ์งธ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ด ๋” ํฌ๋ฉด ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พผ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ฐ’๊ณผ ์„ธ ๋ฒˆ์งธ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ๊ฐ’์ด ๋” ํฌ๋ฉด ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พผ๋‹ค.
  • โ€ฆ
  • N - 1๋ฒˆ์งธ ๊ฐ’๊ณผ N๋ฒˆ์งธ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ N - 1๋ฒˆ์งธ ๊ฐ’์ด ๋” ํฌ๋ฉด ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พผ๋‹ค.

์„ธ์ฐฌ์ด๋Š” ๋ฒ„๋ธ” ์ •๋ ฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹น์—ฐํžˆ ์•Œ๊ธฐ์— ๋ฒ„๋ธ” ์ •๋ ฌ์˜ ์ค‘๊ฐ„ ๊ณผ์ •์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ N์ด ๋งค์šฐ ํฌ๋ฏ€๋กœ ์œ„์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ K๋ฒˆ ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ์„ธ์ฐฌ์ด๋ฅผ ๋„์™€ ๋ฒ„๋ธ” ์ •๋ ฌ์˜ ์ค‘๊ฐ„ ๊ณผ์ •์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์—ฌ๋ผ.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ์ฒ˜์Œ ์ˆ˜์—ด์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฆ‰, ์ฒ˜์Œ ์ˆ˜์—ด์„ ์ด๋ฃจ๋Š” N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด๋กœ ๋‘๊ณ  ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค.

  • 1 โ‰ค N โ‰ค 100,000
  • 1 โ‰ค K โ‰ค N
  • ์ˆ˜์—ด์˜ ๊ฐ ํ•ญ์€ 1 ์ด์ƒ 1,000,000,000 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์œ„ ๋‹จ๊ณ„๋ฅผ K๋ฒˆ ํ•œ ํ›„ ์ˆ˜์—ด์˜ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿš€ํ’€์ด

๋ฒ„๋ธ” ์ •๋ ฌ์˜ k ๋ฒˆ์งธ ์ƒํ™ฉ์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์‹ค์ œ๋กœ ๋ฒ„๋ธ” ์ •๋ ฌ์„ ๋งŒ๋“ค์–ด์„œ k๋ฒˆ์งธ ์ƒํ™ฉ์— ์ถœ๋ ฅ์„ ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฌด์กฐ๊ฑด ๋‚œ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์•ผํ•˜๋Š”๋ฐ ์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋จผ์ € ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.

int n, k;
vector<int> v;
priority_queue<int, vector<int>, greater<int>> q;

cin >> n >> k;
v = vector<int>(n);

for (int i = 0; i < n; ++i)
{
    cin >> v[i];
}

๊ทธ ๋’ค k๊นŒ์ง€๋งŒ ์šฐ์„  ์ˆœ์œ„ ํ์— ๋„ฃ๋Š”๋‹ค.

for (int i = 0; i < k; ++i)
{
	q.push(v[i]);
}

์•„๋ž˜๊ฐ€ ์ค‘์š”ํ•œ๋ฐ q์— v[i + k]๋ฅผ ๋„ฃ๊ณ  v[i]๋ฅผ q.top์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
๊ทธ ๋’ค q.pop์„ ํ•ด์ค€๋‹ค.
v[i]๊ฐ€ ๋ฐ”๋€๋‹ค๋Š”๊ฒŒ ์ค‘์š”ํ•œ๋ฐ ์˜ˆ์ œ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์ดํ•ด๋ฅผ ํ•˜์ž.

4 1
62 23 32 15

v : 62 23 32 15
q : 23 62

v : 23 23 32 15
q : 32 62

v : 23 32 32 15
q : 15 62

v : 23 32 15 15
q : 62

์ด๋ ‡๊ฒŒ ๋ณ€ํ•œ๋‹ค.

for (int i = 0; i < n - k; ++i)
{
	q.push(v[i + k]);
	v[i] = q.top();
	q.pop();
}

n - k๊นŒ์ง€ v[i]๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๋‚จ์•„์žˆ๋Š” ํ ๊ฐ’๋“ค์„ ๋‹ค ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

for (int i = 0; i < n - k; ++i)
	cout << v[i] << " ";

while (q.empty() == false)
{
	cout << q.top() << " ";
	q.pop();
}

๐Ÿš€์ „์ฒด ์ฝ”๋“œ

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>

using namespace std;

int n, k;
vector<int> v;
priority_queue<int, vector<int>, greater<int>> q;
void solve()
{
	cin >> n >> k;
	v = vector<int>(n);

	for (int i = 0; i < n; ++i)
	{
		cin >> v[i];
	}

	for (int i = 0; i < k; ++i)
	{
		q.push(v[i]);
	}

	for (int i = 0; i < n - k; ++i)
	{
		q.push(v[i + k]);
		v[i] = q.top();
		q.pop();
	}

	for (int i = 0; i < n - k; ++i)
		cout << v[i] << " ";

	while (q.empty() == false)
	{
		cout << q.top() << " ";
		q.pop();
	}
}

int main() 
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}

ํƒœ๊ทธ:

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

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