π λ¬Έμ
https://www.acmicpc.net/problem/2531
π μμ΄λμ΄
μνμΌλ‘ iλ²μ§Έ μμ μ°μν΄μ λ¨Ήμ μ μλ λ§νΌ (i+k)λ§νΌμ λͺ¨λ νμΈνλ λ°©μμΌλ‘ νμ΄λ ν΅κ³Όν©λλ€.
μ λ μ¬λΌμ΄λ© μλμ° λ°©λ²μ μ΄μ©ν΄μ νμμ΅λλ€
μμ μμ ν΄μμ μ΄κΈ°μ kλ§νΌμ μ μμ, μΏ ν°μ μ΄μ©ν΄ λ¨Ήμ μ΄λ°₯μ 미리 λ£μ΄λ‘λλ€.
μ μ κ²½μ° μ΄λ hashmapμ μ¬μ©νμ¬ λ¨Ήμ μ€μλ₯Ό μ λλ° bucketμ μ΄μ©ν νμ΄λ κ°λ₯ν©λλ€.
hashλ₯Ό μ΄μ©νλ κ²½μ° μ μ κ²½μ°λ eaten.put(susi[right], eaten.getOrDefault(susi[right], 0) + 1);κ³Ό κ°μ΄ μ¬μ©νμ¬ κ°μ κ°±μ νλ λ°©μμΌλ‘ μ§ννμμ΅λλ€.
bucketμ μ΄μ©νλ κ²½μ°λ susi[λ¨Ήμ μ€μμ μ’ λ₯] ++ μ μ΄μ©νμ¬ if(susi[λ¨Ήμμ€μμ μ’ λ₯]++ == 0) μ΄λΌλ©΄ λ¨Ήμ μ μλ μ€μμ μ’ λ₯λ₯Ό ν κ° μ¦κ°μν€λ λ°©μμΌλ‘ μ μ μμ΅λλ€.
μ΄νμλ kμ΄νλ‘ λͺ¨λ μ΄λ°₯μ μνμΌλ‘ λλλ€.
μ΄λ μμμ λ¨Ήμλ μ€μλ₯Ό νλλ₯Ό λ€μ λ±μ΄λ΄κ³ μ΄λ² μ μλ₯Ό λ¨Ήλλ€ λΌλ λλμΌλ‘ νμ΄νμλ©΄ λ©λλ€(μ¬λΌμ΄λ© μλμ°)
μ¬κΈ°μ μ£Όμν΄μΌ ν κ²μ μ€μκ° νμ νκΈ°λλ¬Έμ λ¨μν μ€μ μ μλ§νΌ λ°λ³΅νμ§ μκ³ (μ€μμ μ + μ°μμΌλ‘ λ¨Ήμ μ μλ μ)λ§νΌ λ°λ³΅νμ¬ λ°°μ΄μ λ§μ§λ§ μͺ½κ³Ό μ²μμ μ°μμΌλ‘ λ¨Ήλ κ²½μ°λ₯Ό κ³μ°ν΄ μ£Όμ΄μΌ ν©λλ€. ν΄λΉνλ λ°λ‘λ μλμ κ°μ κ²½μ°κ° μμ΅λλ€. μ΄λ°₯ 2,3μ λ¨Ήκ³ κΈ°μ‘΄μ μΏ ν°μΈ 5λ² μ΄λ°₯κΉμ§ λ¨Ήμ΄ μ΅λ 3κ°μ μ΄λ°₯μ λ¨Ήμ μ μμ΅λλ€.
ν μ€νΈ μΌμ΄μ€
4 30 2 5
3
5
5
2
=> 3μ΄ λμμΌ ν©λλ€(μνμΌλ‘ μκ°ν΄μΌ ν©λλ€)
κ³μ°νλ κ²½μ°λ ν΄μμ΄κΈ° λλ¬Έμ κ°μ΄ μ€μμ κ°μ΄ 0μΈ κ²½μ°λ ν΄μμμ μμ ν μ κ±°ν΄ μ£Όμ΄μΌ ν©λλ€.
bucketμμμλ λΉΌλ κ²½μ° if(--bucket[]==0)μΈ κ²½μ° λ¨Ήμ μ μλ μ΄λ°₯μ μλ₯Ό νλ κ°μμν€κ³ , λ²ν· if(++bucket[]==1)μΈ κ²½μ°μλ λ¨Ήμ μ μλ μ΄λ°₯μ΄ νλ μ¦κ°ν κ²½μ°μ΄κΈ° λλ¬Έμ λ¨Ήμ μ μλ μ΄λ°₯μ μλ₯Ό νλ μ¦κ°μν€λ λ°©λ²μΌλ‘ μ§ννλ©΄ λ κ² κ°μ΅λλ€.
π νμ΄
package λ°±μ€.slidingWindow;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Boj_2531_νμ μ΄λ°₯ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int dishCnt = Integer.parseInt(st.nextToken());
int susiCnt = Integer.parseInt(st.nextToken());
int chainCnt = Integer.parseInt(st.nextToken());//μ°μν΄μ
int coupon = Integer.parseInt(st.nextToken());
int max = 0;
int[] susi = new int[dishCnt];
for (int i = 0; i < dishCnt; i++) {
susi[i] = Integer.parseInt(br.readLine());
}
HashMap<Integer, Integer> eaten = new HashMap<>();
eaten.put(coupon, 1); //μ΄λ―Έ λ¨Ήμκ²
for (int right = 0; right < chainCnt; right++) {
eaten.put(susi[right], eaten.getOrDefault(susi[right], 0) + 1);
}
max = Math.max(max, eaten.size());
//μ΄λνλ©΄μ νμΈ
for (int right = chainCnt; right < dishCnt + chainCnt - 1; right++) {
int left = susi[(right - chainCnt) % dishCnt];
if (eaten.get(left) == 1) {
eaten.remove(left);
} else {
eaten.put(left, eaten.get(left) - 1); //λ¨Ήμκ±°μμ μ κ±°
}
int key = susi[right % dishCnt];
eaten.put(key, eaten.getOrDefault(key, 0) + 1);
max = Math.max(max, eaten.size());
}
System.out.println(max);
}
}
'λ°±μ€(boj)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA]13418 νκ΅ νλ°©νκΈ°, 골λ 3 (0) | 2023.08.21 |
---|---|
[JAVA]5427 λΆ κ³¨λ4 (0) | 2023.08.21 |
[JAVA]2230 μ κ³ λ₯΄κΈ°, ν¬ ν¬μΈν°(골λ5) (0) | 2023.08.09 |
[JAVA]11780 νλ‘μ΄λ, νλ‘μ΄λ μμ (1) | 2023.08.09 |
[JAVA]λ°±μ€ 13335 νΈλ Deque, queue (0) | 2023.07.31 |