[Boj_11003] ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/11003

 

โ–ธ ๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜ A1, A2, ..., AN๊ณผ L์ด ์ฃผ์–ด์ง„๋‹ค.

Di = Ai-L+1 ~ Ai ์ค‘์˜ ์ตœ์†Ÿ๊ฐ’์ด๋ผ๊ณ  ํ•  ๋•Œ, D์— ์ €์žฅ๋œ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ด๋•Œ, i ≤ 0 ์ธ Ai๋Š” ๋ฌด์‹œํ•˜๊ณ  D๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

โ–ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ L์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ N ≤ 5,000,000)

๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜ Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (-109 ≤ Ai ≤ 109)

 

โ–ธ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— Di๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿ’ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ํ”Œ๋ ˆํ‹ฐ๋„˜ 5
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ์ž๋ฃŒ๊ตฌ์กฐ, ์šฐ์„ ์ˆœ์œ„ ํ, ๋ฑ
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๊ตฌ๊ฐ„์˜ ๊ณ ์ • ๊ธธ์ด l๋งŒํผ ์Šฌ๋ผ์ด๋”ฉ์„ ์›€์ง์ด๋ฉฐ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

Java์—์„œ ์šฐ์„ ์ˆœ์œ„ ํ ํ’€์ด๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•˜์—ฌ

์–‘๋ฐฉํ–ฅ Queue์ธ Deque๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

Deque์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ int[] ๋ฐฐ์—ด๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , 

๋‘ ๋ฒˆ์งธ ์ธ์ž์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. โžก {num, idx}

 

๋ฌธ์ œ์˜ ์˜ˆ์ œ ์ž…๋ ฅ 1์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด๋ฉด,

 

i = 0 : [ {1, 0} ] โžก 1

i = 1 : [ {1, 0}, {5, 1} ] โžก 1, 1

i = 2 : [ {1, 0}, {5, 1}, {2, 2} ] โžก 1, 1, 1

โžก ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋ณด๋‹ค  ์ด์ „์˜ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (5 > 2 : deque.peekLast()[0] > num) 

 

i = 3 :  [ {1, 0}, {2, 2}, {3, 3} ] โžก 1, 1, 1, 2

โžก ํ˜„์žฌ ์ตœ์†Ÿ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ ๊ตฌ๊ฐ„์˜ ๊ณ ์ • ๊ธธ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (0 < 1 : deque.peek()[1] < i - (l-1))

 

i = 4 :  [ {2, 2}, {3, 3}, {6, 4} ] โžก 1, 1, 1, 2, 2

i = 5 :  {2, 2}, {3, 3}, {6, 4}, {2, 5} ] โžก 1, 1, 1, 2, 2, 2

โžก ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋ณด๋‹ค ์ด์ „์˜ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (3, 6 > 2)

โžก ํ˜„์žฌ ์ตœ์†Ÿ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ ๊ตฌ๊ฐ„์˜ ๊ณ ์ • ๊ธธ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (2 < 3)

 

i = 6 : [ {2, 5}, {3, 6} ] โžก 1, 1, 1, 2, 2, 2, 2

i = 7 : [ {2, 5}, {3, 6}, {7, 7} ] โžก 1, 1, 1, 2, 2, 2, 2, 2

i = 8 : [ {2, 5}, {3, 6}, {7, 7}, {3, 8} ] โžก 1, 1, 1, 2, 2, 2, 2, 2, 3

โžก ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋ณด๋‹ค ์ด์ „์˜ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (7 > 3)

โžก ํ˜„์žฌ ์ตœ์†Ÿ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ ๊ตฌ๊ฐ„์˜ ๊ณ ์ • ๊ธธ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (5 < 6)

 

i = 9 : [ {3, 6}, {3, 8}, {5, 9} ] โžก 1, 1, 1, 2, 2, 2, 2, 2, 3, 3

i = 10 : [ {3, 6}{3, 8}, {5, 9}, {2, 10} ] โžก 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 2

โžก  ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋ณด๋‹ค ์ด์ „์˜ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (3, 5 > 2)

 

i = 11 : [ {2, 10}, {6, 11} ] โžก 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 2

 

์œ„ ํ’€์ด๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 962996KB
์‹œ๊ฐ„ : 2312ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
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());
        int l = Integer.parseInt(st.nextToken()); // ๊ณ ์ •๊ตฌ๊ฐ„

        StringBuilder sb = new StringBuilder();
        Deque<int[]> deque = new ArrayDeque<>(); // num, idx
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            int num = Integer.parseInt(st.nextToken());
            while (!deque.isEmpty() && deque.peekLast()[0] > num) {
                deque.removeLast();
            }
            deque.offer(new int[] {num, i});
            if (deque.peek()[1] < i - (l-1)) {
                deque.remove();
            }
            sb.append(deque.peek()[0]).append(" ");
        }

        System.out.println(sb.toString());
    }
}

 

ํ•ด๊ฒฐ ์™„๋ฃŒ ! ๐Ÿ”ฅ