- ๋ฐฑ์ค
- BFS
- ์์ฝ๋
- Python
- nestjs
- ํธ๋ฆฌ
- Union-Find
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ์ด๋ถํ์
- ์ํฐ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- LCs
- ์น๋ฆฐ์ด
- ๋ค์ต์คํธ๋ผ
- ๋นํธ๋งต
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ๋นํธ๋ง์คํน
- golang
- ์นด์นด์ค ์ฝํ
- ์ฌ๊ท
- DP
- go
- js
- DFS
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- C++
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ์นด์นด์ค2021
- Today
- Total
Hello Ocean! ๐ผ
[์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] ๋ฐฑ์ค #2531 ํ์ ์ด๋ฐฅ ๋ณธ๋ฌธ
[๋ฌธ์ ]

ํ์ ํ๋ ๋ฒจํธ ์์ ์์ ๊ฐ์ด ์ด๋ฐฅ๋ค์ด ์๋ค. ๋ฒจํธ ์์๋ ๊ฐ์ ์ข ๋ฅ์ ์ด๋ฐฅ์ด ์ฌ๋ฌ๊ฐ ์์ ์ ์๋ค.
์๋์ ์ด๋ฐฅ์ ๊ณจ๋ผ์ ๋จน์ ๊ฒ์ด๋ค.
1. ์ฐ์์ผ๋ก k์ ์๋ฅผ ๋จน์ ๊ฒฝ์ฐ, ํ ์ธ๋ ๊ฐ๊ฒฉ์ ์ง๋ถํ๋ค.
2. ๊ฐ ๊ณ ๊ฐ์๊ฒ ์ด๋ฐฅ ์ข ๋ฅ ์ค ํ๋๊ฐ ์ฐ์ฌ์ง ์ฟ ํฐ์ ๋ฐํํ๊ณ , ์๋์ด 1๋ฒ ํ์ฌ์ ์ฐธ๊ฐํ ๊ฒฝ์ฐ ํด๋น ์ด๋ฐฅ 1์ ์๋ฅผ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ค. ๋ฒจํธ ์์ ํด๋น ์ด๋ฐฅ์ด ์์ ๊ฒฝ์ฐ ์๋ก ๋ง๋ค์ด ์ ๊ณตํ๋ค.
์๋์ ์์ ํ์ฌ์ ์ฐธ์ฌํ์ฌ ์ต๋ํ ๋ค์ํ ์ข ๋ฅ์ ์ด๋ฐฅ์ ๋จน์ผ๋ ค๊ณ ํ๋ค.
[input]
๋ฒจํธ์ ๋์ธ ์ ์์ ์ N ( 2 โค N โค 30000 )
์ด๋ฐฅ์ ๊ฐ์ง์ d ( 2 โค d โค 3000 )
์ฐ์ํด์ ๋จน๋ ์ ์์ ์ k ( 2 โค k โค 3000 (k โค N) )
์ฟ ํฐ๋ฒํธ c ( 1 โค c โค d )
N d k c
์ด๋ฐฅ ์ข ๋ฅ (ํ์ค์ฉ)
[output]
์ฃผ์ด์ง ํ์ ์ด๋ฐฅ ๋ฒจํธ์์ ๋จน์ ์ ์๋ ์ด๋ฐฅ ๊ฐ์ง์์ ์ต๋๊ฐ
[ํ์ด]
์ฒซ ๋ฒ์งธ.
count ์ kind๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ด์ฉํ์.
count = [start~c๊ฐ ๋์ฌ ๋ ๊น์ง ์ ์ ๊ฐ์, ... , c~c ์ ์ ๊ฐ์, ... , c~end ์ ์ ๊ฐ์]
kind = [start~c๊ฐ ๋์ฌ ๋ ๊น์ง ์ด๋ฐฅ ์ข ๋ฅ, ... , c~c ์ด๋ฐฅ ์ข ๋ฅ, ... , c~end ์ด๋ฐฅ ์ข ๋ฅ]

์ด๋ ๊ฒ ํ๋ฉด ์ด๋ค ๊ฒฝ์ฐ์์๋ ๋น ๋ฅด๊ฒ output์ ๊ตฌํ ์ ์์ง๋ง, ์ฌ์ ํ ์์ ํ์์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ์๋ค.
์์ ํ์์ ๊ฒฝ์ฐ ์ต์ ์ ๋ณต์ก๋๊ฐ O(N*k) = 3000000 * 3000 = 90์ต ์ด๋ฏ๋ก ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ ๋ฒ์งธ.(์ต์ข )
์ด ๋ฌธ์ ์ ๊ดํด ์กฐ์ฌํ๋ ์ค '์ฌ๋ผ์ด๋ฉ ์๋์ฐ' ๊ธฐ๋ฒ์ผ๋ก ํ์ด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค.
์ง๋๋ฒ ์คํฐ๋์์ ๋์๋ ๊ธฐ๋ฒ์ธ๋ฐ, ์์ ํ์๊ณผ์ ๋ค๋ฅธ ์ ์ ์ดํดํ์ง ๋ชปํด ๋์ค์ ๊ณต๋ถํ ๊ฒ์ผ๋ก ๋ฏธ๋ค๋์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.

์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ์๋์ฐ๊ฐ ๋ฏธ๋๋ฌ์ง๋ฏ์ด ๋ฐฐ์ด์ ์ฒซ ๋ถ๋ถ ๋ถํฐ ๋ ๋ถ๋ถ๊น์ง ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.

์์ ์ ๋ ฅ์ ์๋ก๋ค๋ฉด ์ด๋ฐ์์ผ๋ก ํ์ํ๊ฒ ๋๋ค.
์ฌ๊ธฐ๊น์ง๋ง ๋ณด๋ฉด ์์ ํ์๊ณผ ๋ฌด์์ด ๋ค๋ฅธ์ง ์๋ฌธ์ด ๋ค๊ธฐ ์์ํ๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ O(n)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ฐ, ๋งค๋ฒ k๊ฐ์ ์ ์๋ฅผ ๋ชจ๋ ๊ฒ์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐฉ๊ธ ๋บ ์ค์์ ์ข ๋ฅ๊ฐ ๋ ์ด์ ์๋์ฐ์ ์์ผ๋ฉด count-=1
- ๋ฐฉ๊ธ ์๋ก ๋ค์ด์จ ์ค์์ ์ข ๋ฅ๊ฐ ์๋ ์๋์ฐ์ ์๋ ๊ฒ์ด๋ฉด count+=1
- ํ์ฌ์ ์๋์ฐ ์์ c๋ฒ(์ฟ ํฐ)์ค์๊ฐ ์์ ๊ฒฝ์ฐ count+=1
ํด์ ์ด์ ์๋์ฐ์ count๊ฐ๊ณผ ๋น๊ตํ์ฌ ๋ ํฐ๊ฐ์ผ๋ก ์ ์ง์์ผ์ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋ค.
ํ ์๋์ฐ ๋ด์ ์ฐ์ฐ์ด ์์๋ฒ์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ O(n)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ๊ฒ์ด๋ค.
์๋์ฐ๋ ๊ณ์ ๋งจ ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋งจ ๋ค์ ๋ค๋ฅธ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฐ์ฐ๋๊ธฐ ๋๋ฌธ์ C++ STL queue ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์๋ค.
[์ต์ข ์ฝ๋]
#include <stdio.h>
#include <algorithm> //max()๋ฅผ ์ํ ํค๋ํ์ผ
#include <queue>
#include <memory.h> //memset์ ๋ฐฑ์ค์์ ์ฌ์ฉํ๊ธฐ ์ํ ํค๋ํ์ผ
using namespace std;
int n, d, k, c;
int belt[3000000];
int kind[3000];
int i, j;
queue<int> window;
int slidingWindow() {
int maxcount;
int count = 0;
int temp;
for (int i = 0;i < k;i++) {
temp = belt[i];
window.push(temp);
if (kind[temp - 1] == 0)
count++;
kind[temp - 1]++;
}
if (kind[c - 1] == 0)
maxcount = count + 1;
else
maxcount = count;
for (int i = k;i < n+k;i++) {
int tempcount = count;
//๋งจ ์์ ์๋ ์ ์ ํ์ธ ํ ์ ๊ฑฐ
int front = window.front();
kind[front - 1]--;
if (kind[front-1]==0)
tempcount--;
window.pop();
//์๋ก์ด ์ ์ ์ถ๊ฐ
temp = belt[i%n];
window.push(temp);
if (kind[temp - 1] == 0)
tempcount++;
kind[temp - 1]++;
//์ฟ ํฐ ์ด๋ฐฅ์ ์์ง ๋จน์ง ์์์ ๋
if (kind[c - 1] == 0)
maxcount=max(maxcount,tempcount+1);
else
maxcount = max(maxcount, tempcount);
count = tempcount;
}
return maxcount;
}
int main() {
memset(belt, 0, sizeof(belt));
scanf_s("%d", &n);
scanf_s("%d", &d);
scanf_s("%d", &k);
scanf_s("%d", &c);
for (int i = 0;i < n;i++) {
scanf_s("%d", &belt[i]);
}
printf("%d", slidingWindow());
}
[๊ณ ๋ คํ ์ ]
1. slidingWindow()์์ for๋ฌธ์ ๋๋ฆด ๋, k~n-1๊น์ง๊ฐ ์๋๋ผ, n~n+k-1(n๋ฒ)๋๋ ค์ผ ํ๋ ์ ์ด ์ค์
2. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ฐฐ์ด์ ์ฒ์๊ณผ ๋์ด ์๋ ๋ชจ์์ด์ง๋ง, ์ค์ ๋ก ๋ฒจํธ ํํ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ belt[i%n]๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ค์
3. ์ฟ ํฐ ์ด๋ฐฅ์ ์๋ก ๋ง๋ค์ด๋จน์ด์ผ ํ๋์ง ์๋์ง๋ ๋งค window๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, tempcount์ ๋ํด๋ฒ๋ ค์ ๋๊ธฐ๊ฒ ๋๋ฉด ๋ค์ window๊ฐ ์ํฅ์ ๋ฐ๋๋ค. ๋ฐ๋ผ์ ๋ณ์์ ๋ํ์ง ๋ง๊ณ if๋ฌธ์ ์ด์ฉํด ์๋์ ๊ฐ์ด ์์ฑํด์ผํจ
if (kind[c - 1] == 0)
maxcount=max(maxcount,tempcount+1);
else
maxcount = max(maxcount, tempcount);
count = tempcount;
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ก ํ ์ ์๋ค๋ ๊ฒ์ ๋ชฐ๋์ผ๋ฉด, ์ดํ๋ฐค์ ์๋ ํ์ง ๋ชปํ์ ๊ฒ ๊ฐ์ ๋ฌธ์ ์๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] ๋ฐฑ์ค #1417 ๊ตญํ์์ (0) | 2020.04.11 |
---|---|
[C++] ๋ฐฐ์ด ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ (0) | 2020.04.11 |
[์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] programmers, N์ผ๋ก ํํ (0) | 2020.04.04 |
[C++] C++ ์ฝ๋ฉ ์์ํ๊ธฐ (visual studio) (0) | 2020.04.02 |
[์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ์ ๋ต] 8์ฅ ๋์ ๊ณํ๋ฒ_1 (0) | 2020.04.02 |