SlidingWindow 3

[JAVA]BOJ 15961, 회전 초밥

16472, 고냥이 문제와 비슷하다. 거의 똑같다! 1. 배열에 입력한 초밥 저장한다.2. k개의 초밥이 있는 윈도우를 만들고 left와 right를 증가시켜 윈도우를 움직인다.3. 윈도우 안에 초밥을 map형식으로 저장하고 map의 크기와 max를 비교해 max를 찾는다.주의할 점은 쿠폰초밥(c)를 처음에 추가해준다. 무조건 k개의 초밥을 먹고 쿠폰초밥(c)를 먹기때문에 처음부터 쿠폰초밥(c)를 map에 추가했다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.StringToke..

코딩가딩가 2024.08.18

[JAVA]BOJ 16472, 고냥이

진짜 너무너무 어렵다.. 머리의 한계를 느낌.. 덩어리(?)채로 알파벳과 개수를 key로 저장하고 더했다 빼는데 .. 잘 안되고.. 배열을 썼는데도 이상하고.. 암튼  처음(0)부터 오른쪽포인터를 하나씩 늘려, 한 글자씩 길이와 알파벳 개수를 센다(map에 저장). 알파벳 개수가 N개를 넘어갔을때(N+1), 앞(0)에서부터 한 글자씩 뺀다(왼쪽포인터 증가). 빼면서 길이 -1을 하다가 해당 알파벳 개수가 0개가 되면 map에서 지운다. map에서 지우니 알파벳 개수는 N이 될거고 다시 오른쪽을 늘려나간다.. 오른쪽이 범위를 넘었을때 끝난다. 그리고 오른쪽을 늘릴때마다 최대 길이를 계산한다. 글로는 어려워서 그림으로 설명을 대체한다.. 핵심은.. 두 포인터가 각각 앞에서부터 한 글자씩 본다는 점이다.나는 ..

코딩가딩가 2024.08.07

[JAVA]BOJ 12891, DNA 비밀번호

쉽네~ 하고 풀었다가 시간초과 받고 슬라이딩윈도우 방식으로 풀었다. 1. 처음에 한 방식이렇게 모든 범위 하나하나마다 DNA 조건에 일치하는지 확인했다. i ~ j 까지.. 시간초과 났고 다시 짰다.public static int checkPassword(char[] password, int[] DNA, int P){ int i, j, cnt = 0; int[] tmp = {DNA[0], DNA[1], DNA[2], DNA[3]}; // i~j까지 값이 DNA안이랑 같은지 확인 -> 확인할때마다 i~j 변해야함 // j가 인덱스범위를 넘어가면 안됨 for(j=P-1;j 1(8-8+1) -> 2(9-8+1) .. while(i 2. 슬라이딩 윈도우를 적용한 방식1.처..

코딩가딩가 2024.08.04