Hard deck/reindexing d2

010 : Deque + Sliding Window

서버관리자 페페 2023. 6. 22. 11:18

 

 

 

 

오른쪽으로 쌓고, 왼쪽으로 잘라낸다

 

 

3가지 작업 (인식자 = 넣을거)

- 넣기

- 넣을 때 L을 벗어나는 것 제거(4-3 = 1)

- 넣는것보다 큰것은 미리 제거하고 넣음

 

*접근 : field > pointer(deque.getFirst()); 

 

 

 

 

 

 

*connector를 사용 / 별도 class Node 사용

*for i 의 connector 외에 별도 기수 할당이 필요하면 Node를 사용(특히 비교)

 

 

 

 

 

 

 

 

 

import java.io.*;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {

        // ISC
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int V = Integer.parseInt(st.nextToken());
        int L = Integer.parseInt(st.nextToken());

        // D2F
        st = new StringTokenizer(br.readLine());
        Deque<Node> mydeque = new LinkedList<>();

        // OP + OEC patch
        for (int i = 0; i < V; i++) {

            int now = Integer.parseInt(st.nextToken());

            while (!mydeque.isEmpty() && mydeque.getLast().value > now) {
                mydeque.removeLast();
            }

            mydeque.addLast(new Node(i, now));

            if (mydeque.getFirst().pointer <= i-L) {
                mydeque.removeFirst();
            }

            // OEC
            bw.write(mydeque.getFirst().value + " ");
        }
        bw.flush();
        bw.close();
    }

    static class Node {
        int pointer;
        int value;

        Node(int pointer, int value) {
            this.pointer = pointer;
            this.value = value;
        }

    }
}

 

 

 

 

 

 

 

 

 

 

(사고 경향)

- for는 공간을 한 차원 확장

- 공간 위치값 = index // 공간 상태값 = value

- 함수 사용시 항상 위치 먼저 할당(이 일들이 어디서 일어나는지 : mydeque.removeLast();)

- 하나 하나 만든 뒤 작업하지 말고, 작업하면서 만들수 있나 생각해본다

'Hard deck > reindexing d2' 카테고리의 다른 글

025 : DFS 친구관계 파악하기  (0) 2023.06.23
028 : 트리의 지름 구하기  (0) 2023.06.23
012 : Stack으로 오큰수 구하기  (0) 2023.06.21
013 : Queue를 이용한 카드 게임  (0) 2023.06.21
005 : 나머지 합 구하기  (0) 2023.06.21