728x90
반응형
https://www.acmicpc.net/problem/11003
풀이
덱과 배열 1개를 이용하여 풀 수 있습니다.
덱에는 배열의 인덱스 위치만 저장하고 값을 입력받을 때마다, 덱의 마지막값의 위치에 있는 배열을 가져와 비교하면서 제거해주면 됩니다.
또한 i - 덱의 처음값이 l보다 클 경우 맨앞자리를 빼줍니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), l = Integer.parseInt(st.nextToken());
ArrayDeque<Integer> deque = new ArrayDeque<>();
int[] arr = new int[n];
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && arr[deque.peekLast()] > arr[i]) {
deque.pollLast();
}
deque.offer(i);
if(i - deque.peekFirst() >= l) {
deque.pollFirst();
}
sb.append(arr[deque.peekFirst()]).append(" ");
}
System.out.print(sb);
}
}
728x90
반응형
'백준 > 10001 - 15000' 카테고리의 다른 글
[백준] 14226번 : 이모티콘(JAVA) (0) | 2021.12.28 |
---|---|
[백준] 10026번 : 적록색약(JAVA) (0) | 2021.11.02 |
[백준] 12015번 : 가장 긴 증가하는 부분 수열2(JAVA) (0) | 2021.09.09 |
[백준] 14925번 : 목장 건설하기(JAVA) (0) | 2021.09.08 |
[백준] 12904번 : A와 B(JAVA) (0) | 2021.08.27 |
댓글