- μ¬κ·
- λΉνΈλ§΅
- μν°λ
- nestjs
- μκ³ λ¦¬μ¦
- C++
- μΉ΄μΉ΄μ€ μ½ν
- μΉλ¦°μ΄
- ν리μ¨λ³΄λ©
- μ¬λΌμ΄λ© μλμ°
- μ΄λΆνμ
- νΈλ¦¬
- go
- μΉ΄μΉ΄μ€2021
- κ°μ₯κ°κΉμ΄κ³΅ν΅μ‘°μ
- λ°±μλ ν리μ¨λ³΄λ©
- Union-Find
- DFS
- νλ‘κ·Έλλ¨Έμ€
- Python
- LCs
- golang
- μμ½λ
- js
- λμ νλ‘κ·Έλλ°
- λ°±μ€
- DP
- λΉνΈλ§μ€νΉ
- BFS
- λ€μ΅μ€νΈλΌ
- 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 |