자바 덱을 사용한 최소값 문제

정호윤·2023년 3월 21일

자바

목록 보기
43/46

백준문제링크

주어지는 수가 굉장히 커서 정렬을 사용할수 없다.덱을 사용하면 숫자가 정렬되는 효과를 볼수 있다.

import java.util.*;
import java.io.*;


public class Main {
// Deque에 줄 노드
  static class Node{
    public int value;
    public int index;
    Node(int value,int index){
      this.value=value;
      this.index=index;
    } 
  }
	public static void main(String args[]) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringTokenizer st = new StringTokenizer(br.readLine()," ");
    int N = Integer.parseInt(st.nextToken());
    int M = Integer.parseInt(st.nextToken());
    st=new StringTokenizer(br.readLine()," ");
    Deque<Node> dq = new LinkedList<>();

    for(int i=0;i<N;i++){
      int now = Integer.parseInt(st.nextToken());
		// 마지막 요소가 지금 들어온거 보다 크면 최소값이 아니므로  제거한다.
      while(!dq.isEmpty()&&dq.getLast().value > now) dq.removeLast();
      // 새로운 노드를 덱에 넣어준다.
      dq.addLast(new Node(now,i));
	// 인덱스에서 M을 뺀 값이 첫째 요소의 index보다 크거나 같으면 제거해준다. 
      if(i-M>=dq.getFirst().index) dq.removeFirst();
      
      bw.write(dq.getFirst().value+" ");
    }
    bw.flush();
    bw.close();
    br.close();
  }
}
profile
개발자로 취직을 희망합니다.

1개의 댓글

comment-user-thumbnail
2023년 3월 24일

덱은 자바 컬렉션 프레임워크의 일부이며, 최소값 문제를 해결하는 데 사용될 수 있습니다. 최소값을 찾으려면 덱에 값을 추가하고 비교하여 최소값을 유지합니다. 그러나 이외의 구체적인 문제나 코드에 대한 질문이 있으면 언제든지 물어보세요!. My Centura Health

답글 달기