BOJ 11920. ๋ฒ๋ธ ์ ๋ ฌ
๐โโ๏ธ[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;
}