์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ํ๋ก๊ทธ๋๋ฐ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- K๋ฐฐํฐ๋ฆฌ
- ์๋ฐ
- html
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ ์
- ๊นํ๋จ
- ์ฑ
- ์ํ
- ํ์ด์ฌ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- database
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- css
- ComputerScience
- ๋ผํ๋ผ์ค์๋ง๋
- JavaScript
- ์ปดํจํฐ๊ณผํ
- Python
- ํ์ผ์ ๋ก๋
- ๊ฐ๋ฐ
- ๋ฐ์ํ
- Java
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ค๋ผํด
- ๋ฆฌ์กํธ
- ์ฝ๋ฉ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- Today
- Total
JiYoung Dev ๐ฅ
[๋ฐฑ์ค 11003] ์ต์๊ฐ ์ฐพ๊ธฐ : Deque ๋ณธ๋ฌธ
[๋ฐฑ์ค 11003] ์ต์๊ฐ ์ฐพ๊ธฐ : Deque
Shinjio 2024. 10. 29. 22:56๐ ๋ฌธ์
https://www.acmicpc.net/problem/11003
๐ ํ์ด
์ฝํ ์ค๋น๋ฅผ ์ํด Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ ์ฑ ์ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ฉฐ ๋ง๋ ๋ฌธ์ ๋ก, Deque๋ฅผ ํ์ฉํ์ฌ ์ต์๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์์ ์ ์ ์์๋ค. ์ฝํ ์ด๋ณด์์ธ ๋๋ ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ด์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ ํธ๋ ๋ฐฉ์์ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ํด๋น ๋ฌธ์ ๋ฅผ ์ด์ค For์ผ๋ก ํ ๊ฒฝ์ฐ ์๊ฐ ์ ํ์ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ๋ฐฉ์์ ์ฐพ์์ผํ๋ค.
์ด ๋ฌธ์ ์์ ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ์ธ Deque๋ ๋ฌด์์ผ๊น?
Deque(๋ฑ)์ด๋, ์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ก LinkedList, ArrayDeque ๋ฑ์ผ๋ก ๊ตฌํํ๋ค.
addFirst(), removeFirst() ํจ์๋ฅผ ํตํด ๋งจ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ ํ ์ ์๊ณ ,
addLast(), removeLast() ํจ์๋ฅผ ํตํด ๋งจ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ ํ ์ ์๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํ ๋ ์๋์ ๊ท์น์ ์ดํดํด์ผ ํ์ด ๋ฐฉ์์ ์ดํดํ ์ ์๋ค.
1. deque๋ ์ต์๊ฐ ์(์์ ์ซ์ ์)์ผ๋ก ์ ๋ ฌ๋๋ค.
2. deque์ ํฌ๊ธฐ๋ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด ์๋๋ค.
์ด ๊ท์น์ ํ ๋๋ก ๋ง๋ก์จ ๋ฌธ์ ํ์ด ๋ฐฉ์์ ์ค๋ช ํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- Deque์ ๋ค์ด๊ฐ๋ ๊ฐ์ฒด(class)์ ๊ตฌ์กฐ๋ index์ value๋ฅผ ํฌํจํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Deque.addLast()๋ฅผ ํตํด ์๋กญ๊ฒ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ง๋ง, ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง์ฝ ์๋กญ๊ฒ ๋ค์ด์ค๋ ๊ฐ๋ณด๋ค ๊ธฐ์กด์ Last์ ์ ์ฅ๋ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ํด๋น ๊ฐ์ removeLast()๋ฅผ ํตํด ์ญ์ ํ๋ค. → ์์ ์ซ์ ์์ผ๋ก ์ ๋ ฌ
- ๊ทธ๋ฆฌ๊ณ , ์๋กญ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ์ index์ First์ ์ ์ฅ๋ index์ ์ฐจ์ด๊ฐ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด First์ ๊ฐ์ ์ง์ด๋ค.
- ์์ ๊ท์น์ด ์ ์ฉ๋ deque๋ผ๋ฉด ์ต์๊ฐ์ ๋งจ ์(First)์ ์กด์ฌํ๋ ๊ฐ์ด๋ฏ๋ก getFirst()๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์ถ๋ ฅํ๋ค.
์์์ ํ์ดํ ๋ด์ฉ์ java ์ฝ๋๋ก ์์ฑํ ๋ด์ฉ์ด๋ค.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.LinkedList;
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 countOfNumber = Integer.parseInt(st.nextToken());
int sizeOfWindow = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
Deque<Node> deque = new LinkedList<>();
for(int i = 0 ; i < countOfNumber ; i++){
int now = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && deque.getLast().value > now){
deque.removeLast();
}
deque.addLast(new Node(now, i));
if(i - deque.getFirst().index >= sizeOfWindow){
deque.removeFirst();
}
bw.write(deque.getFirst().value + " ");
}
bw.flush();
bw.close();
}
static class Node{
int value;
int index;
Node(int value, int index){
this.value = value;
this.index = index;
}
}
}
์ฝ๋์ ํ์ดํ ๋ด์ฉ์ ๋น๊ตํ๋ฉฐ ์ค๋ช ํ์๋ฉด,
- Deque์ ๋ค์ด๊ฐ๋ ๊ฐ์ฒด(class)์ ๊ตฌ์กฐ๋ index์ value๋ฅผ ํฌํจํ๋ค.
Node class๋ฅผ ์๋์ ๊ฐ์ด ์ ์ํ๊ณ , Deque์์๋ ์์ฑํ Node ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ค.
static class Node{
int value;
int index;
Node(int value, int index){
this.value = value;
this.index = index;
}
}
- ๊ธฐ๋ณธ์ ์ผ๋ก Deque.addLast()๋ฅผ ํตํด ์๋กญ๊ฒ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ง๋ง, ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง์ฝ ์๋กญ๊ฒ ๋ค์ด์ค๋ ๊ฐ๋ณด๋ค ๊ธฐ์กด์ Last์ ์ ์ฅ๋ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ํด๋น ๊ฐ์ removeLast()๋ฅผ ํตํด ์ญ์ ํ๋ค. → ์์ ์ซ์ ์์ผ๋ก ์ ๋ ฌ
- ๊ทธ๋ฆฌ๊ณ , ์๋กญ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ์ index์ First์ ์ ์ฅ๋ index์ ์ฐจ์ด๊ฐ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด First์ ๊ฐ์ ์ง์ด๋ค.
- ์์ ๊ท์น์ด ์ ์ฉ๋ deque๋ผ๋ฉด ์ต์๊ฐ์ ๋งจ ์(First)์ ์กด์ฌํ๋ ๊ฐ์ด๋ฏ๋ก getFirst()๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์ถ๋ ฅํ๋ค.
for(int i = 0 ; i < countOfNumber ; i++){
int now = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && deque.getLast().value > now){
deque.removeLast();
}
deque.addLast(new Node(now, i));
if(i - deque.getFirst().index >= sizeOfWindow){
deque.removeFirst();
}
bw.write(deque.getFirst().value + " ");
}
Deque๋ผ๋ ์๋ฃ๊ตฌ์กฐ ํ์ฉ์ ๋ํด ๋ชฐ๋์ ๋ ๋ฌด์ฒ ์ด๋ ต๊ฒ ๋๊ปด์ง ๋ฌธ์ ์์ง๋ง, ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ์๊ณ ๋์ง ํ์ด ์์ฒด๋ ์ด๋ ต์ง ์์๋ค. ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ์ ์ ๋ฆฌํด์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ ํ์ด ์์ด ํ ์ ์๋๋ก ์ฐ์ตํด์ผ๊ฒ ๋ค.
'Study > ์๊ณ ๋ฆฌ์ฆ, ๊ตฌํ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1874] ์คํ์ผ๋ก ์ค๋ฆ์ฐจ์ ์์ด ๋ง๋ค๊ธฐ : Stack (1) | 2024.11.05 |
---|---|
[๋ฐฑ์ค 2563] ์ด์ฐจ์ ๋ฐฐ์ด : ์์ข ์ด (0) | 2023.11.08 |