๐ ๋งํฌ
https://www.acmicpc.net/problem/20136
๐คฏ ํ์ค ํ๊ธฐ
๋๊ฐ ๋ฉํฐํญ์ 50๋ง๊ฐ๋ ๊ฝ์์ ใ กใ ก
๐คท ๋ฌธ์
๐ฉ๐ป ํ์ด
์ ํ๋ ๋ฉํฐํญ ๊ตฌ๋ฉ ๊ฐ์์ ์ ๊ธฐ ์ฉํ์ ๊ฝ์ ๋ ์ด๋ป๊ฒ ๊ฝ์์ผ ํจ์จ์ ์ผ๋ก ํ ์ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํจ์จ์ ์ด๋๊ฑด ๋ค๋ฅธ ์ ๊ธฐ ์ฉํ์ ์ฐ๋ ค๊ณ ๋นผ๋ ํ์๋ฅผ ์ค์ด๋ ๊ฒ์ ๋งํ๋ค.
์ฆ, ๋ง์ด ๋์ค๋ฉด์ ๋ ์ต๊ทผ์ ๋์ค๋ ์ฉํ๋ค์ ๋ฏธ๋ฆฌ ์๋นผ๋๊ณ ์๋๊ฒ ์ด๋์ด๋ค.
์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ๋ฉด ๋๋๋ฐ, ์ฒ์์ ์๊ฐ ํ ๊ฑด ๋ฉํฐํญ ์์ฒด๋ฅผ ์ฐ์ ์์ ํ๋ก ๊ตฌํํ๊ณ , ๊ทธ๋ฆฌ๋ํ๊ฒ ๋ ๋ง์ด ๋์ค๋ ์ฉํ๋ค์ ๊ณ์ ๊ฝ์๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ง์ด ๋์ค๋ ์ฉํ์ด ๋งจ ๋ค์ ๋ชฐ๋ ค ์์ผ๋ฉด ์์ฉ์ด ์๋ค.
๋ฐ๋ผ์ ๋ ๋จผ์ ๋์ค๋ ์ฉํ๋ค๋ ์๊ฐ์ ํด์ค์ผํ๋ค.
ํ ํ๋๋ฅผ ๋ ๋ง๋ค์ด์ ํด๋น ์ ๊ธฐ ์ฉํ์ด ๋ํ๋๋ ์ธ๋ฑ์ค๋ฅผ ๋ชจ๋ ๋ฃ์ด์คฌ๋ค.
๊ทธ๋ฌ๊ณ ์ฐ์ ์์ ํ(๋ฉํฐํญ)์๋ ํด๋น ์ ๊ธฐ ์ฉํ์ ์ด๋ฆ, ํด๋น ์ ๊ธฐ ์ฉํ์ด ๋ค์์ ๋์ฌ ์ธ๋ฑ์ค ๋ฒํธ ๋ฅผ ์ ์ฅํด์ฃผ์๋ค.
ํ์ ์ฐ์ ์์๋ ์ธ๋ฑ์ค๊ฐ ๋ ๋ค์ธ (๋์) ์์๋๋ก์ด๋ค.
๊ทธ๋ฌ๋ฉด ํ๋ฒ์ ๊ตํํ ์ ๊ธฐ ์ฉํ์ ์๊ฒ ๋๋ค. ์ฆ, ๋ ๋ค์ ๋์ค๋ ์ ๊ธฐ ์ฉํ์ ๋จผ์ ๋นผ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
์ฃผ์ํ ์ ์, ์ด๋ฏธ ๊ฝํ์๋ ๊ฒฝ์ฐ์ธ๋ฐ ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ visit ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ฝํ์์ผ๋ฉด 1๋ก ๋ฐ๊พธ๊ณ ๋น ์ง๋ฉด ๋ค์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
๊ฝํ ์๋ ๊ฒฝ์ฐ์๋ ๋ค์์ ๋์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํด์ค์ผํ๋๋ฐ, ์ด ์ ์ ์ฌ์ค ๊ทธ๋ฅ pushํด๋ ์๊ด์ด์๋ค.
์๋ํ๋ฉด ํ๋ ๋ฌด์กฐ๊ฑด ์ธ๋ฑ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
๋ฐ๋ผ์ ์ด์ ์ ์ด๋ฏธ ๋ค์ด๊ฐ ์๋ ์ ๊ธฐ ์ฉํ์ ์ง๊ธ ๋ค์ด๊ฐ ์ธ๋ฑ์ค๋ณด๋ค ๋ ๋ฎ๊ธฐ ๋๋ฌธ์ ํ์ top์ผ๋ก ๋ถํฐ ๋ ๋ด๋ ค๊ฐ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๊ฑด ์๊ฐํ์ง ์๊ณ ๊ทธ๋ฅ pushํด๋ฒ๋ ค๋ ์๊ด์ด ์๋ค.
๐ป ์ฝ๋
//AC
//BOJ 20136 ๋ฉํฐํญ ์ค์ผ์ฅด๋ง2
#include <iostream>
#include <vector>
#include <queue>
#define SIZE 500001
#define INF 987654321
using namespace std;
struct Multi{
int name; int idx;
};
struct Cmp{
bool operator()(const Multi &a, const Multi &b){
return a.idx < b.idx;
}
};
priority_queue<Multi, vector<Multi>, Cmp> tap;
priority_queue<int, vector<int>, greater<int> > q[SIZE];
int arr[SIZE];
int visit[SIZE];
int main(){
int N, K, n, ans = 0, cnt = 0;
cin >> N >> K;
for(int i=1; i<=K; i++){
scanf("%d", &n);
arr[i] = n;
q[n].push(i);
}
for(int i=1; i<=K; i++){
if(visit[arr[i]]){
q[arr[i]].pop();
if(!q[arr[i]].empty()) tap.push({arr[i], q[arr[i]].top()});
else tap.push({arr[i], INF});
continue;
}
if(cnt < N){
q[arr[i]].pop();
if(!q[arr[i]].empty()) tap.push({arr[i], q[arr[i]].top()});
else{
tap.push({arr[i], INF});
}
cnt += 1;
visit[arr[i]] = 1;
}
else{
Multi prev = tap.top();
visit[prev.name] = 0;
tap.pop();
q[arr[i]].pop();
if(!q[arr[i]].empty()) tap.push({arr[i], q[arr[i]].top()});
else tap.push({arr[i], INF});
visit[arr[i]] = 1;
ans += 1;
}
}
printf("%d", ans);
return 0;
}
'DEV > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/22352] ํญ์ฒด์ธ์, c++ (0) | 2021.08.05 |
---|---|
[BOJ/16118] ๋ฌ๋น ์ฌ์ฐ, c++ (0) | 2021.07.25 |
[BOJ/21924] ๋์ ๊ฑด์ค, c++ (0) | 2021.06.08 |
[BOJ/2023] ์ ๊ธฐํ ์์, c++ (1) | 2021.06.08 |
[BOJ/21921] ๋ธ๋ก๊ทธ , c++ (0) | 2021.06.08 |