개발일기
Baekoon 11003 최소값 찾기 본문
https://www.acmicpc.net/problem/11003
11003번: 최솟값 찾기
N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.
www.acmicpc.net
1. Deque를 이용하여 문제를 풀었다.
2. 슬라이딩 윈도우 문제였음.
3. 처음에는 Deque를 사용하지 않고 for문을 이중for문을 사용하여 2개 돌렸지만... 시간초과가 나서.. 다른 사람 코드를 참고하였다.
나중 이중 for문을 해당 슬라이딩으로 제한주어 전체다 for문을 안돌게 시간복잡도를 구현해주었지만, for문 안되는거 같다.
package src.Week8.Baekjoon11003;
import java.io.*;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Baekjoon11003 {
static int N, L;
static int []arr,answer;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
Deque<Node> deque = new LinkedList<>();
for(int i=0;i<N; i++){
int num = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && deque.getLast().value > num){
deque.removeLast();
}
deque.addLast(new Node(num, i));
if(deque.getFirst().index <= i-L){
deque.removeFirst();
}
bw.write(deque.getFirst().value + " ");
}
bw.flush();
bw.close();
}
static class Node{
public int value;
public int index;
Node(int value, int index){
this.value = value;
this.index = index;
}
}
}
'Algorithm > 알고리즘' 카테고리의 다른 글
프로그래머스 둘만의 암호 자바 (1) | 2024.04.03 |
---|---|
[PCCP 모의고사 #1] 3번 - 유전법칙 (자바) (0) | 2024.04.03 |
Baekjoon 1148 단어만들기 자바 (0) | 2024.04.03 |
핸드폰 번호 가리기 (0) | 2024.04.02 |
Baekjoon13460Java (0) | 2024.02.26 |