๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/30804
- ์ํ๋ ๊ธด ๋ง๋์ N๊ฐ์ ๊ณผ์ผ์ด ๊ฝํ์๋ ๊ณผ์ผ ํํ๋ฃจ๋ฅผ ๋ง๋ค์์ต๋๋ค.
- ๊ณผ์ผ์ ๊ฐ ์ข ๋ฅ์๋ 1๋ถํฐ 9๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด์๊ณ , ์์ชฝ๋ถํฐ ์ฐจ๋ก๋ก S1,S2,โฏ,SN๋ฒ ๊ณผ์ผ์ด ๊ฝํ์์ต๋๋ค.
- ๊ณผ์ผ ํํ๋ฃจ๋ฅผ ๋ค ๋ง๋ ์ํ๊ฐ ์ฃผ๋ฌธ์ ๋ค์ ํ์ธํด๋ณด๋ ๊ณผ์ผ์ ๋ ์ข ๋ฅ ์ดํ๋ก ์ฌ์ฉํด๋ฌ๋ผ๋ ์์ฒญ์ด ์์์ต๋๋ค.
- ์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ ๊ณผ์ผ์ ๋ ์ข ๋ฅ ์ดํ๋ก ์ฌ์ฉํ ํํ๋ฃจ ์ค์์, ๊ณผ์ผ์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ํํ๋ฃจ์ ๊ณผ์ผ ๊ฐ์๋ฅผ ๊ตฌํ์ธ์.
- ํํ๋ฃจ๋ฅผ ๋ค์ ๋ง๋ค ์๊ฐ์ด ์์๋ ์ํ๋, ๋ง๋์ ์์ชฝ๊ณผ ๋ค์ชฝ์์ ๋ช ๊ฐ์ ๊ณผ์ผ์ ๋นผ์ ๋ ์ข ๋ฅ ์ดํ์ ๊ณผ์ผ๋ง ๋จ๊ธฐ๊ธฐ๋ก ํ์ต๋๋ค.
- ์์์ a๊ฐ, ๋ค์์ b๊ฐ์ ๊ณผ์ผ์ ๋นผ๋ฉด Sa+1,Sa+2,โฏ,SN−b−1,SN−b๋ฒ ๊ณผ์ผ, ์ด N−(a+b)๊ฐ๊ฐ ๊ฝํ์๋ ํํ๋ฃจ๊ฐ ๋ฉ๋๋ค. (0 ≤ a, b;
- ์ฒซ ์ค์ ๊ณผ์ผ์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋๋ค. (1 ≤ N ≤ 200000)
- ๋์งธ ์ค์ ํํ๋ฃจ์ ๊ฝํ ๊ณผ์ผ์ ์๋ฏธํ๋ N๊ฐ์ ์ ์ S1,โฏ,SN์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋๋ค. (1 ≤ Si ≤ 9)
์์ด๋์ด
- ๋์ ์ ๊ธฐ์ค์ผ๋ก ๋์ ์ ์ ์ ๋๋ ค๊ฐ๋ฉด์ ๊ณผ์ผ์ ์ข ๋ฅ์ ๊ฐ์๋ฅผ HashMap์ ์ ์ฅํด์ค๋ค.
- ๋์ ์ ๋๋ ค, ๊ณผ์ผ์ ์ข ๋ฅ๋ฅผ ์ถ๊ฐํ๋๋ฐ ๊ณผ์ผ์ ์ข ๋ฅ๊ฐ 2 ์ด๊ณผ๊ฐ ๋๋ค๋ฉด ์์์ ๊ณผ์ผ ์ข ๋ฅ์ ๊ฐ์๋ฅผ 1๊ฐ ๋นผ์ค๋ค. (์์์ ์ 0์ผ๋ก ์์)
- ๋ง์ฝ ์์์ ์ ๊ณผ์ผ ๊ฐ์๊ฐ 0๊ฐ๋ผ๋ฉด, ๊ณผ์ผ ์ข ๋ฅ์์ ์์์ ๊ณผ์ผ ์ข ๋ฅ๋ฅผ ์ ๊ฑฐํด์ค๋ค, ์์์ ์ ์ฆ๊ฐ์ํจ๋ค.
- ๊ทธ๋ฆฌ๊ณ ํ์ฌ์ ๋์ ๊ณผ ์์์ ๊ฐ๊ฒฉ๊ณผ max๊ฐ ์ค ๋ ํฐ ๊ฐ์ผ๋ก max๊ฐ์ ๊ฐฑ์ ํ๋ค. (๋์ ๊ณผ ์์์ ์ ๊ฐ๊ฒฉ์ด ๊ณผ์ผ์ ๊ฐ์์ด๋ฏ๋ก)
๊ฒช์ ์ํ์ฐฉ์ค
- ์ฒ์์ ์ผ์ค for๋ฌธ์ ์จ์ ํฌํฌ์ธํฐ ๋ฐฉ์์ผ๋ก ํ์๋ค๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค... (ํฌํฌ์ธํฐ๋ก ํผ๊ฒ ์๋์๋...?)
- ๊ทธ๋์ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ์กฐ๊ธ ํ๋ค์๋ค... ใ ใ
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ30804 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ๊ณผ์ผ์ ๊ฐ์
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
// ๊ณผ์ผ์ ๋ฃ์ด์ค ๋ฐฐ์ด
int arr[] = new int[N];
for(int i = 0; i < N; i++){
int n = Integer.parseInt(st.nextToken());
arr[i] = n;
}
// ๊ณผ์ผ์ ๊ฐ์ ์ต๋๊ฐ์ ์ ์ฅํ ๋ณ์
int max = Integer.MIN_VALUE;
// ์์์
int s = 0;
// ๊ณผ์ผ์ ์ข
๋ฅ๋ฅผ ์ ์ฅํ HashMap (๊ณผ์ผ์ ์ข
๋ฅ์ ๊ฐ์๋ฅผ ์ ์ฅ)
HashMap<Integer, Integer> fruits = new HashMap<>();
// ๋์
for(int i = 0; i < N; i++){
// ํ์ฌ ๊ณผ์ผ์ ๊ณผ์ผ ์ข
๋ฅ์ ์ถ๊ฐํ๊ณ
// ๋ง์ฝ ํด๋น ๊ณผ์ผ์ด ์๋ค๋ฉด 0์ 1์ ์ถ๊ฐํ๊ณ
// ๊ธฐ์กด์ ์๋ค๋ฉด ๊ธฐ์กด ๊ฐ์ 1์ ๋ํด์ ์ ์ฅํจ
fruits.put(arr[i], fruits.getOrDefault(arr[i], 0) + 1);
// ๊ณผ์ผ์ ์ข
๋ฅ๊ฐ 2๊ฐ ์ด๊ณผ๊ฐ ๋๋ค๋ฉด
while(fruits.size() > 2){
// ์์์๋ถํฐ ์์ ์ผํ๋ฏ๋ก
// ์์์ ์ ๊ณผ์ผ ๊ฐ์๋ฅผ 1๊ฐ ์ค์
fruits.put(arr[s], fruits.get(arr[s]) - 1);
// ๋ง์ฝ ์์์ ๊ณผ์ผ์ ์ข
๋ฅ ๊ฐ์๊ฐ 0์ด ๋๋ค๋ฉด
// ํด๋น ๊ณผ์ผ์ ์ข
๋ฅ๋ฅผ HashMap์์ ์ ๊ฑฐ
if(fruits.get(arr[s]) == 0){
fruits.remove(arr[s]);
}
// ์์์ ์ ์ฆ๊ฐ์ํด
s = s + 1;
}
// ํ์ฌ ์ต๋๊ฐ๊ณผ (๋์ - ์์์ + 1)ํ ํฌ๊ธฐ์ ๋น๊ตํด์
// ๋ ํฐ ๊ฐ์ ์ต๋๊ฐ์ผ๋ก ๊ฐฑ์
max = Math.max(max, i - s + 1);
}
System.out.println(max);
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2024.08.19 |
---|---|
[Java] BOJ 1074 Z (0) | 2024.08.18 |
[Java] BOJ 21736 ํ๋ด๊ธฐ๋ ์น๊ตฌ๊ฐ ํ์ํด (0) | 2024.08.16 |
[Java] BOJ 18870 ์ขํ ์์ถ (2) | 2024.08.15 |
[Java] BOJ 18111 ๋ง์ธํฌ๋ํํธ (0) | 2024.08.14 |