๊ธฐ๋ก๋ฐฉ

BOJ_11003 : ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_11003 : ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ

Soom_1n 2022. 11. 3. 21:30

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

11003๋ฒˆ: ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ

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

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ผ์ • ๋ฒ”์œ„ ์•ˆ์—์„œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์™€ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๋Š” ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ i-L+1 ~ i ์ด๋ฏ€๋กœ L๋กœ ์ƒ๊ฐํ•œ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ •๋ ฌ์€ O(nlogn)์ธ๋ฐ N,L ์˜ ๋ฒ”์œ„๊ฐ€ 5,000,000๊นŒ์ง€ ์ด๋ฏ€๋กœ ์ •๋ ฌ์€ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
    • O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•ด์•ผ๋˜๋ฏ€๋กœ ์œˆ๋„์šฐ๋ฅผ ๋ฑ(deque)๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ •๋ ฌ ํšจ๊ณผ๋ฅผ ๋‚ธ๋‹ค.
  • ๋ฑ์€ (์ธ๋ฑ์Šค, ์ˆซ์ž) ํ˜•ํƒœ์˜ ๋…ธ๋“œ๋ฅผ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
  • ์ƒˆ ๋…ธ๋“œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‚ฝ์ž…
    • ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ƒˆ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๋ฉด ์‚ญ์ œํ•˜๊ณ , ์ƒˆ ๋…ธ๋“œ ์‚ฝ์ž…
    • ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ƒˆ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์œผ๋ฉด, ์ƒˆ ๋…ธ๋“œ ๊ทธ๋ƒฅ ์‚ฝ์ž…
  • ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋ฑ์˜ ์›์†Œ๋“ค์˜ ์ธ๋ฑ์Šค ๋ฒ”์œ„๊ฐ€ ์ปค์ง€๋ฉด, ๋งจ ์•ž ๋…ธ๋“œ ์‚ญ์ œ
  • ์ตœ์†Œ๊ฐ’ ์ถœ๋ ฅ(๋ฐฐ์—ด ๋๊นŒ์ง€ ๋ฐ˜๋ณต)

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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 {
        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 l = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        Deque<Node> deque = new LinkedList<>();
        for (int i = 0; i < n; i++){
            int now = Integer.parseInt(st.nextToken());
            // ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ •๋ ฌ ๋Œ€์‹  ํ˜„์žฌ ์ˆ˜๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋ฑ์—์„œ ์ œ๊ฑฐ

            while (!deque.isEmpty() && deque.getLast().value > now){
                deque.removeLast();
            }
            deque.addLast(new Node(now, i));
            // ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚œ ๊ฐ’์€ ๋ฑ์—์„œ ์ œ๊ฑฐ
            if (deque.getFirst().index <= i-l){
                deque.removeFirst();
            }
            bw.write(deque.getFirst().value + " ");
        }
        bw.close();
    }

    static class Node{
        public int value;
        public int index;

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

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • Nodeํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ’๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋ฑ ์„ Node ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธํ•œ๋‹ค.
  • ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 
    • ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ƒˆ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ๋ฐ˜๋ณตํ•ด์„œ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    • ๋งŒ์•ฝ ๋งจ ์•ž ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด, ์œˆ๋„์šฐ๊ฐ€ l๋ณด๋‹ค ์ปค์ง„ ๊ฒƒ์ด๋ฏ€๋กœ ๋งจ ์•ž ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค.
    • ํ˜„์žฌ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ˆ˜๊ฐ€ ๋ฒ”์œ„์˜ ์ตœ์†Œ๊ฐ’์ด๋ฏ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 


๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ ํ’€์–ด๋ณธ ๊ณจ๋“œ1 ๋ฌธ์ œ์˜€๋Š”๋ฐ, ๊ต์žฌ์˜ ํ’€์ด๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ํ’€ ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • java์—์„œ ๋ฑ ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŽ์ด ์—ฐ์Šตํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค.
  • ํƒœ๊ทธ์˜ ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ์žˆ๋Š” ๊ฑธ ๋ณด๋‹ˆ, ๋ฑ ๋Œ€์‹  ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์ธ๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_17298 : ์˜คํฐ์ˆ˜  (0) 2022.11.07
BOJ_1874 : ์Šคํƒ ์ˆ˜์—ด  (0) 2022.11.07
BOJ_12891 : DNA ๋น„๋ฐ€๋ฒˆํ˜ธ  (0) 2022.11.03
BOJ_1120 : ๋ฌธ์ž์—ด  (0) 2022.11.02
BOJ_1064 : ํ‰ํ–‰์‚ฌ๋ณ€ํ˜•  (0) 2022.11.01