728x90
전형적인 투포인터 문제다
map 자료구조를 이용하여 풀었다.
package a0405;
import java.util.*;
import java.io.*;
/*
투포인터 이용하면 될듯?
*/
public class 백준15961_회전초밥 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int dish = sc.nextInt();
int menu = sc.nextInt();
int len = sc.nextInt();
int plus = sc.nextInt();
int[] arr = new int[dish];
for(int i=0; i<dish; i++) {
arr[i] = sc.nextInt();
}
Map<Integer, Integer> map = new HashMap<>();
int maxcnt = 0;
for(int i=0; i<len; i++) {
if(map.containsKey(arr[i]))map.replace(arr[i], map.get(arr[i])+1);
else {
map.put(arr[i], 1);
}
}
int nowcnt = map.size();
int frontidx = 0;
int backidx = len;
int front = 0;
int back =0;
while(true) {
front = arr[frontidx];
back = arr[backidx];
//System.out.println("front:"+front+" back:"+back);
if(map.get(front)==1)map.remove(front);
else map.replace(front, map.get(front)-1);
if(map.containsKey(back))map.replace(back, map.get(back)+1);
else map.put(back, 1);
nowcnt = map.size();
if(!map.containsKey(plus))nowcnt++;
maxcnt = Math.max(nowcnt, maxcnt);
frontidx++;
backidx++;
if(backidx==dish)backidx = 0;
if(frontidx==dish)break;
}
System.out.println(maxcnt);
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
백준2239 - 스도쿠 java (0) | 2022.04.06 |
---|---|
SWEA - 벽돌깨기 java (0) | 2022.04.05 |
SWEA - 파핑파핑 지뢰찾기 JAVA (0) | 2022.04.05 |
SWEA - 프로세서 연결하기 JAVA (0) | 2022.04.05 |
[알고리즘] 백준17472 - 다리만들기2 java (0) | 2022.04.01 |